PHP получить индекс массива объекта, имеющего конкретное значение ключа - PullRequest
0 голосов
/ 04 ноября 2019

Мне нужно проверить, существует ли определенный ключ / значение, а затем вернуть индекс массива, членом которого является ключ / значение, без необходимости циклически проходить через каждый элемент и / или уровни массива. Возможно ли это?

 [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. я видел различные способы просто определить, существует ли ключ / значение, но я не видел нецикличного метода для возврата индекса массива, которому он принадлежит.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

Вы можете сделать комбинацию array_column () и array_search () . Посмотрите здесь .

$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 голосов
/ 04 ноября 2019

Вы также можете использовать array_column () для создания нового массива с идентификатором в качестве ключа. Тогда у вас есть все поля в прямом доступе.

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

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

Пример вывода:

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',
  ),
)
...