Найти значение в многомерном массиве с помощью PHP array_column - PullRequest
0 голосов
/ 18 октября 2019

Добрый день, возможно ли найти значение в многомерном массиве, используя что-то вроде этого:

$array = [['a', 'b', 'c'], ['x', 'y', 'z']];
$key = array_search('y', array_column($array , array_search('y', current($array))));

Хотя я мог бы использовать цикл for(), чтобы перебрать его и найти значение, ноЯ пытаюсь увидеть, есть ли способ сделать это как один вкладыш.

Пока я застрял на array_search(), возвращая false, должен только возвращать int

Ответы [ 3 ]

2 голосов
/ 18 октября 2019

Вы можете использовать array_walk_recursive

$array  = [['a', 'b', 'c'], ['x', 'y', 'z']];
$findme = 'y';
$key    = null;
array_walk_recursive($array, function($v, $k) use($findme, &$key){
  if($v === $findme) $key = $k;
});
echo $key;

Рабочий пример: https://3v4l.org/GUqGH


В случае, если вам нужны оба ключа, используйте array_walk

 array_walk($array, function($v , $k) use (&$keys, $findme){
    $found = array_search($findme, $v);
    isset($found) ? ($keys = [$k, $found]) : '';
 }); 
 print_r($keys);

Рабочий пример: https://3v4l.org/U6bhn

0 голосов
/ 18 октября 2019

array_column получить весь массив, соответствующий ключу, который вы вставили. Здесь, кажется, вы пытаетесь получить индекс строки и столбца значения.

Вы можете сделать это как

$array = [['a', 'b', 'c'], ['x', 'y', 'z']];
for( $i = 0; $i < count( $array ); $i++ ){
    $key = array_search( 'y', $array[ $i ] );
    if( $key ) {
        echo "Row: ". $i . " Key: " . $key . "<br />";
    }
}

дальнейшая реализация в соответствии с вашими требованиями.

0 голосов
/ 18 октября 2019

Вы можете использовать foreach для поиска всех целевых значений,

$search = "y";
$keys = [];
$array = [['a', 'b', 'c'], ['x', 'y', 'z']];
foreach($array as $row_index => $value){
    foreach($value as $col_index => $v){
        if($search == $v){
            $keys[] = array(
                "row_index" => $row_index,
                "col_index" => $row_index
            );
        }
    }
}
...