【问题标题】:How to compare and filter 2 arrays如何比较和过滤 2 个数组
【发布时间】:2015-10-14 04:08:28
【问题描述】:

第一个这样的数组

$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');

请帮帮我

【问题讨论】:

标签: php arrays web filter compare


【解决方案1】:

您可以使用 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);

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加说明将有助于未来访问者。
【解决方案2】:

试试吧:

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

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

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

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

【讨论】:

    【解决方案3】:

    你会试试的:

    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);
    

    【讨论】:

      【解决方案4】:

      请试试这个

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

      我不确定。

      【讨论】:

      • 好吧,那么,确保!!无论生成的警告如何,它都不会产生 OP 想要的!
      • 说真的?!!我想你既没有读过那个问题也没有读过这个问题!!但是,您未能完成的概念已经足够好了!首先array_push()函数将$zones_array2参数附加到第一个参数的末尾,这样函数执行后,第一个第一个参数将有整个 $array_zone2 作为最后一个元素。尽管如此,array_unique() 函数将数组元素作为字符串进行比较,而不是像多维数组一样!!
      猜你喜欢
      • 2021-08-31
      • 2015-08-04
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多