【问题标题】:How to differentiate 2 multidimensional arrays?如何区分2个多维数组?
【发布时间】:2020-02-25 07:17:30
【问题描述】:

我正在尝试获取两个多维数组的差异并返回另一个数组中不匹配的数组。

我在这里:

数组 1:

Array ( 
    [0] => Array ( [Dashboard] => /LMS/Dashboard ) 
    [1] => Array ( [Notifications] => /LMS/Notifications ) 
    [2] => Array ( [Clients] => /LMS/Clients ) 
    [3] => Array ( [Penalties] => /LMS/Penalties ) 
    [4] => Array ( [Payments] => /LMS/Payments ) 
    [5] => Array ( [Profit] => /LMS/Profit ) 
    [6] => Array ( [Income] => /LMS/Income ) 
    [7] => Array ( [Outcome] => /LMS/Outcome ) 
    [8] => Array ( [Accounts] => /LMS/Accounts ) 
    [9] => Array ( [Collection] => ) 
    [10] => Array ( [Missed Payments] => ) 
    [11] => Array ( [Applied Penalties] => ) 
    [12] => Array ( [Group Names] => /LMS/Group-Names ) 
)

数组 2:

Array ( 
    [0] => Array ( [Notifications] => /LMS/Notifications ) 
    [1] => Array ( [Clients] => /LMS/Clients ) 
    [2] => Array ( [Penalties] => /LMS/Penalties ) 
    [3] => Array ( [Payments] => /LMS/Payments ) 
    [4] => Array ( [Collection] => ) 
    [5] => Array ( [Missed Payments] => ) 
    [6] => Array ( [Applied Penalties] => ) 
)

我想得到数组1中没有匹配的数组。

【问题讨论】:

    标签: php codeigniter multidimensional-array


    【解决方案1】:

    您可以使用以下代码:

    public static function check_diff_multi($array1, $array2){
            //Get all the Keys from the 2nd Array.
            $keys = array();
            foreach( $array2 as $key => $a ) {
                $keys = array_merge( $keys, array_keys( $a ));
            }
    
            //This will be the final array
            $result = array();
    
             //Loop through First Array
            foreach( $array1 as $key => $a ) {
                $firstKey = key($a);  //Get the Key
                if( in_array( $firstKey, $keys ) ) {  //If this key exists in the 2nd array, then continue
                    continue;
                }
                $result[] = $array1[$key]; //This key is not present in 2nd array, so add to output.
            }
            return $result;
        }
    

    【讨论】:

    • 我会改进答案。无论如何它有效。谢谢。
    【解决方案2】:
    Please try to use like this 
    
    $aray1 = Array (
    [0] => Array ( [Notifications] => /LMS/Notifications )
    [1] => Array ( [Clients] => /LMS/Clients )
    [2] => Array ( [Penalties] => /LMS/Penalties )
    [3] => Array ( [Payments] => /LMS/Payments )
    [4] => Array ( [Collection] => )
    [5] => Array ( [Missed Payments] => )
    [6] => Array ( [Applied Penalties] => )
    );
    
    $aray2 = Array (
    [0] => Array ( [Dashboard] => /LMS/Dashboard )
    [1] => Array ( [Notifications] => /LMS/Notifications )
    [2] => Array ( [Clients] => /LMS/Clients )
    [3] => Array ( [Penalties] => /LMS/Penalties )
    [4] => Array ( [Payments] => /LMS/Payments )
    [5] => Array ( [Profit] => /LMS/Profit )
    [6] => Array ( [Income] => /LMS/Income )
    [7] => Array ( [Outcome] => /LMS/Outcome )
    [8] => Array ( [Accounts] => /LMS/Accounts )
    [9] => Array ( [Collection] => )
    [10] => Array ( [Missed Payments] => )
    [11] => Array ( [Applied Penalties] => )
    [12] => Array ( [Group Names] => /LMS/Group-Names )
    );
    
    
    
    $printResult = get_diff_array($aray1, $aray2);
    
    function get_diff_array($aray1, $aray2) {
        $arrayResult = [];
        foreach ($aray1 as $key => $val) {
            if (isset($aray2[$key])) {
                if (is_array($val) && $aray2[$key]) {
                    $arrayResult[$key] = get_diff_array($val, $aray2[$key]);
                }
            } else {
                $arrayResult[$key] = $val;
            }
        }
        return $arrayResult;
    }
    

    【讨论】:

      【解决方案3】:

      请试试这个cos:

      public static function diffArray($array1,$array2){
          $flag=0;
              foreach($array1 as $key1 => $value1){
                  foreach ($array2 as $key2 => $value2) {
                      if($key1==$key2)
                          $flag++;
                  }
                  if($flag==0)
                      $array3[$key1]=$value1;
                  $flag=0;
              }
          return $array3;
      }
      

      您的输出将是:

      Array
      (
          [Dashboard] => /LMS/Dashboard
          [Profit] => /LMS/Profit
          [Income] => /LMS/Income
          [Outcome] => /LMS/Outcome
          [Accounts] => /LMS/Accounts
          [Group Names] => /LMS/Group-Names
      )
      

      【讨论】:

      • 可以在公共静态函数中应用吗?
      • 它没有给出任何输出
      • 请改进答案。我会投赞成票。
      • McC0d3 你能建议如何改进我的代码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2018-01-07
      • 2013-03-08
      相关资源
      最近更新 更多