php获取具有特定键值的对象的数组索引

问题描述 投票:0回答:2

我需要测试特定键/值是否存在,然后返回键/值所属的数组索引,而不必遍历数组的每个元素和/或级别。这可能吗?

 [0: 
     { regional:
          [ 0 :
               {
               ID: 1000
               someInfoA : valueA
               someInfoB : valueB
               }
          ]
          [ 1 :
               {
               ID: 1001
               someInfoA : valueA
               someInfoB : valueB
               }
          ]
          [ 2 :
               {
               ID: 1002
               someInfoA : valueA
               someInfoB : valueB
               }
          ]
          [ 3 :
               {
               ID: 1003
               someInfoA : valueA
               someInfoB : valueB
               }
          ]
     }
     { national : 
       [ ... ]
       [ ... ]
     }
] 

在此数据示例中,我需要查看ID: 1002是否存在,如果存在,则返回数组索引:[2],如果不返回false。我已经看到了各种确定键/值是否存在的方法,但是我没有看到用于返回其所属数组索引的非循环方法。

php object multidimensional-array
2个回答
2
投票

您可以组合使用array_column()array_search()。看看here

$records = [
    [
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ],
    [
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ],
    [
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ],
    [
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    ]
];
$key = array_search(3245, array_column($records, 'id'));
echo $key;

0
投票

您还可以使用array_column()创建一个以id为键的新数组。然后,您可以直接访问所有字段。

$arrWithIdAsKey = array_column($records, null, 'id');

echo "<pre>".var_export($arrWithIdAsKey,true)."</pre>";

示例输出:

array (
  2135 => 
  array (
    'id' => 2135,
    'first_name' => 'John',
    'last_name' => 'Doe',
  ),
  3245 => 
  array (
    'id' => 3245,
    'first_name' => 'Sally',
    'last_name' => 'Smith',
  ),
  5342 => 
  array (
    'id' => 5342,
    'first_name' => 'Jane',
    'last_name' => 'Jones',
  ),
  5623 => 
  array (
    'id' => 5623,
    'first_name' => 'Peter',
    'last_name' => 'Doe',
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.