【问题标题】:Filter or Sorting multidimensional arrays in PHP在 PHP 中过滤或排序多维数组
【发布时间】:2012-10-03 16:37:27
【问题描述】:

如果我有两个数组如下:

$array1 = array(array('id'=>11,'name'=>'Name1'),array('id'=>22,'name'=>'Name2'), array('id'=>33,'name'=>'Name3'),array('id'=>44,'name'=>'Name4'),array('id'=>55,'name'=>'Name5'));

$array2 = array(array('id'=>22,'name'=>'Name2'),array('id'=>55,'name'=>'Name5'));

我的预期结果,array2 应该总是在开头:

$newarray = array(array('id'=>22,'name'=>'Name2'),array('id'=>55,'name'=>'Name5'), array('id'=>11,'name'=>'Name1'), array('id'=>33,'name'=>'Name3'),array('id'=>44,'name'=>'Name4'));

My current solution is using two for loops:
foreach($array2 as $Key2 => $Value2) {       

    foreach($array1 as $Key1 => $Value1){            

        if($Value1['id'] != $Value2['id']) {
            //push array 

        }    
    }    
}

编辑: 结果“$newarray”不应包含来自 array1 的重复 ID。

但我正在寻找一种更快、更简单的解决方案。

解决方案:

$a1 = 数组(); foreach ($array1 as $v) $a1[$v['uuid']] = $v;

$a2 = 数组(); foreach ($array2 as $v) $a2[$v['uuid']] = $v;

$filtered = array_values(array_diff_key($a1, $a2)); //print_r($filtered);

$newarray = array_merge($array2, $filtered);

谢谢大家!!!!

谢谢。

问候杰克

【问题讨论】:

标签: php multidimensional-array


【解决方案1】:

你想要$new_array = array_merge($array2, $array1); 将第二个数组放在第一个数组的末尾

【讨论】:

  • 结果会有重复的id
  • 最简单的方法是确保外部数组的每个键都是 id。
【解决方案2】:

您可以使用array_merge() 函数,如下所示:

$newarray = array_merge($array2, $array1);

【讨论】:

    【解决方案3】:

    我不确定您的要求,但要对某个特定键的多维数组进行排序 您需要使用usort 功能 试试下面的代码:

    $cmp = function ($a, $b){  
        $a_val = $a['id'];  
        $b_val = $b['id'];
    
        if ( $a_val == $b_val) {
            return 0;
        }
        return ($a_val < $b_val) ? -1 : 1;
    };
    usort($array2,$cmp);
    

    $array2 将按 'id' 排序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多