按值从多维搜索数组

时间:2017-08-29 21:09:40

标签: php arrays multidimensional-array

我有一个数组,是这样的:

 $itemx=
 [
     'Weapons'=>[
          'Sword'=> [
              'ID'   => '1',
             'Name'   => 'Lurker',
             'Value'  => '12',
             'Made'   => 'Acient'
           ],

           'Shield'=> [
              'ID'   => '2',
              'Name'   => 'Obi',
              'Value'  => '22',
              'Made'   => 'Acient'
            ],

            'Warhammer'=> [
                'ID'   => '3',
               'Name'   => 'Clotch',
               'Value'  => '124',
               'Made'   => 'Acient'
             ]
     ],
     'Drinks'=>[
       'Water'=> [
          'ID'   => '4',
          'Name'   => 'Clean-water',
          'Value'  => '1',
          'Made'   => 'Acient'
        ],

        'Wine'=> [
            'ID'   => '5',
           'Name'   => 'Soff',
           'Value'  => '5',
           'Made'   => 'Acient'
         ],

         'Vodka'=> [
            'ID'   => '6',
            'Name'   => 'Laudur',
            'Value'  => '7',
            'Made'   => 'Acient'
          ]
     ]


 ];

我想通过名称或ID从中找到一个数组,所以我的输出应该是这样的。

*Search by ID=4*

 'Water'=> [
          'ID'   => '4',
          'Name'   => 'Clean-water',
          'Value'  => '1',
          'Made'   => 'Acient'
        ]

我查看其他主题,发现我应该使用array_search

但它没有用。我试过这样:

$arra=$itemx["Drinks"];

$key = array_search(4, array_column($arra, 'ID'));
  var_dump($arra[$key]);

当我尝试使用Name作为搜索键时,它也会正常工作。

我该如何使用?

2 个答案:

答案 0 :(得分:2)

你可以这样做: -

$search_id = 4;
$final_array = [];
 foreach($itemx as $key=>$val){
  foreach($val as $k=>$v){
    if($v['ID'] == $search_id){
      $final_array[$k] =  $itemx[$key][$k];
    }
  }
 }
 print_r($final_array);

https://eval.in/852123

答案 1 :(得分:2)

这应该可以让你得到你想要的东西。

function rec($itemx,$search=4){
    foreach ($itemx as $key => $value) {
        if (is_array($value)) {
            foreach ($value as $k => $v) {
                if ($v['ID'] == $search) {
                    return $value;  
                }
            }
        }
    }
}
print_r(rec($itemx,4));