如何比较和过滤2个数组

时间:2015-10-14 04:08:28

标签: php arrays web filter compare

像这样的第一个数组

$zones_array1 = array();
      $zones_array1[] = array('id' => 'Alabama', 'text' => 'Alabama');
      $zones_array1[] = array('id' => 'Alaska', 'text' => 'Alaska');
      $zones_array1[] = array('id' => 'Arizona', 'text' => 'Arizona');
      $zones_array1[] = array('id' => 'Arkansas', 'text' => 'Arkansas');

像这样的第二个数组

$zones_array2 = array();
      $zones_array2[] = array('id' => 'Alaska', 'text' => 'Alaska');
      $zones_array2[] = array('id' => 'Arizona', 'text' => 'Arizona');

我想过滤这两个数组,我希望最终结果像这样的数组 像这样的第一个数组

$zones_array3 = array();
      $zones_array3[] = array('id' => 'Alabama', 'text' => 'Alabama');
      $zones_array3[] = array('id' => 'Arkansas', 'text' => 'Arkansas');

请帮帮我

4 个答案:

答案 0 :(得分:0)

你可以使用php' in_array'检查天气是否存在其他数组内的元素。在这种情况下,数组是多维的,因此将所有id存储在新创建的数组中,然后将给定的数组与之进行比较。

$check_array = array();
foreach ($zones_array1 as $arr1){
      $check_array[] = $arr1['id'];
}

$zones_array3 = array();

foreach ($zones_array2 as $arr2){
 if (!in_array($arr2['id'], $check_array))
  {
         $zones_array3[] = $arr2;
  }
}

echo '<pre>';
print_r($zones_array3);

答案 1 :(得分:0)

只需尝试:

function udiffCompare($a, $b)
{
    return $a['id'] == $b['id'] ? 0 : -1;
}

$arrdiff = array_udiff($zones_array1, $zones_array2, 'udiffCompare');

echo '<pre>';
print_r($arrdiff);

array_udiff()使用提供的回调函数将第一个数组参数的每个元素与第二个数组参数的所有元素进行比较。如果任何比较的回调返回零,那么第一个参数中数组的元素将不会出现在函数的返回数组中。

答案 2 :(得分:0)

您将尝试:

function unique_multidim_array($array, $key){
    $temp_array = array();
    $i = 0;
    $key_array = array();

    foreach($array as $val){
        if(!in_array($val[$key],$key_array)){
            $key_array[$i] = $val[$key];
            $temp_array[$i] = $val;
        }
        $i++;
    }
    return $temp_array;
}

$zones_array1 = array_merge($zones_array2, $zones_array3);
$zones_array1 = unique_multidim_array($zones_array1, 'id');
print_r($zones_array1);

答案 3 :(得分:-1)

请试试这个

    array_push($zones_array1,$zones_array2);
print_r(array_unique($zones_array1));

我不确定。