2011-10-28 38 views
1

在另一個陣列等於一個值我有這樣從陣列中除去的值,如果它不在PHP

Array 
(
    [0] => Array 
     (
      [0] => 83 
      [1] => 82 
      [2] => 81 
     ) 

    [1] => Array 
     (
      [0] => 81 
      [1] => 82 
      [2] => 83 
      [3] => 100 
      [4] => 101 
      [5] => 102 
      [6] => 103 
      [7] => 104 
      [8] => 105 
     ) 

) 

陣列,並且我想刪除從所述第一陣列是不等於任何值這個陣列

Array 
(
    [0] => 83 
    [1] => 82 
    [2] => 81 
) 

但我想保持與第一個數組相同的結構。所以我會結束這樣的事情

Array 
(
   [0] => Array 
       (
           [0] => 83 
           [1] => 82 
           [2] => 81 
       ) 

   [1] => Array 
       (
           [0] => 81 
           [1] => 82 
           [2] => 83 
       ) 

) 

什麼是最好的方式來實現這一目標?

+0

雖然我需要更多關於「保持相同結構」的信息。你是否也需要相同的鑰匙?同樣的順序? – Tom

+0

@tom沒有鍵真的很重要或值的順序,它只需要是一個多維數組。謝謝 –

+0

然後我的例子應該做到這一點。 – Tom

回答

1

如果$array是你的出發陣列和$matches是要匹配值的數組;

foreach ($array as $key => $subarray) { 
    foreach ($subarray as $subsubarray) { 
     foreach ($matches as $match) { 
      if ($subsubarray == $match) { 
       $finalarr[$key][] = $subsubarray; 
      } 
     } 
    } 
} 

$finalarr將是你想要的結果。

+0

很好的答案。 ;) –

0

您始終可以將陣列設置爲第一個和第二個與array_intersect函數的交點。

<?php 
$array[1] = array_intersect($array[0], $array[1]); 
?> 
4
$data = array(/* your data you want to check (first big array) */); 
$test = array(83, 82, 81); 

foreach ($data as $key => $value) { 
    $intersect = array_intersect($value, $test); 
    if ($intersect != $test) { 
    unset($data[$key]); 
    } else { 
    $data[$key] = $intersect; 
    } 
} 
0
$temp = array 
(
    0 => array 
    (
     0 => 83, 
     1 => 82, 
     2 => 81 
    ), 

    1 => array 
    (
     0 => 81, 
     1 => 82, 
     2 => 83, 
     3 => 100, 
     4 => 101, 
     5 => 102, 
     6 => 103, 
     7 => 104, 
     8 => 105 
    ) 

); 

for($i=0,$tot = count($temp[1]);$i<$tot;$i++) 
{ 
    if(!in_array($temp[1][$i],$temp[0])) 
    { 
     unset($temp[1][$i]); 
    } 
}