首页 > 解决方案 > 基于特定键值的关联数组差异

问题描述

我有两个数组。我想根据 sub-key 得到它们之间的区别name。我可以使用array_diff(array_column($array2, 'name'), array_column($array1, 'name'));,但结果数组缺少其他键/值id,并且created由于使用array_column. 我不需要顶级数字索引与想要的数组相同。

我安装了集合,但找不到合适的方法:https ://laravel.com/docs/5.8/collections#available-methods

阵列 1

array (
  2 => 
  array (
    'name' => 'sitebackup_2019_07_21_10_02_67.zip',
    'id' => '/restore_point_backups/sitebackup_2019_07_21_10_02_67.zip',
    'created' => 1563787267,
  ),
  1 => 
  array (
    'name' => 'sitebackup_2019_07_21_10_00_38.zip',
    'id' => '/restore_point_backups/sitebackup_2019_07_21_10_00_38.zip',
    'created' => 1563787197,
  ),
  0 => 
  array (
    'name' => 'sitebackup_2019_07_19_09_48_16.zip',
    'id' => '/restore_point_backups/sitebackup_2019_07_19_09_48_16.zip',
    'created' => 1563787125,
  ),
)

阵列 2

array (
  0 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_07_19_08_52_37.zip',
    'created' => 1563519157,
  ),
  1 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_07_19_09_48_16.zip',
    'created' => 1563522496,
  ),
  2 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_07_21_10_00_38.zip',
    'created' => 1563696044,
  ),
  3 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_07_21_10_02_67.zip',
    'created' => 1563696184,
  ),
  4 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_07_21_10_12_29.zip',
    'created' => 1563696754,
  ),
  5 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_Jul_21_10_17_58.zip',
    'created' => 1563697083,
  ),
)

通缉

array (
  0 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_07_19_08_52_37.zip',
    'created' => 1563519157,
  ),
  4 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_07_21_10_12_29.zip',
    'created' => 1563696754,
  ),
  5 => 
  array (
    'id' => 'C:\\xampp\\htdocs\\restore_point_backups_fagardesignscom\\files',
    'name' => 'sitebackup_2019_Jul_21_10_17_58.zip',
    'created' => 1563697083,
  ),
)

标签: phparrayslaravelmultidimensional-array

解决方案


试试下面的代码。它会起作用的。

  //Get the column value from array 2 by name
    $array2_col = array_column($array_2, 'name');
    foreach($array as $key=>$value){
       //if array1 name value exist in array 2 get that key and delete from array 2 using unset.
          $index = array_search($value['name'],  $array2_col);
           if($index !== false ){
              unset($array_2[$index]);
           }
        }

        echo "<pre>";
        print_r($array_2 );

演示

输出。

Array
(
    [0] => Array
        (
            [id] => C:\xampp\htdocs\restore_point_backups_fagardesignscom\files
            [name] => sitebackup_2019_07_19_08_52_37.zip
            [created] => 1563519157
        )

    [4] => Array
        (
            [id] => C:\xampp\htdocs\restore_point_backups_fagardesignscom\files
            [name] => sitebackup_2019_07_21_10_12_29.zip
            [created] => 1563696754
        )

    [5] => Array
        (
            [id] => C:\xampp\htdocs\restore_point_backups_fagardesignscom\files
            [name] => sitebackup_2019_Jul_21_10_17_58.zip
            [created] => 1563697083
        )

)

如果你想像1,2,3这样的顺序是数组索引,可以使用array_value。

print_r(array_values($array_2));

演示


推荐阅读