Поиск в многомерном массиве в PHP

#php #arrays

Вопрос:

Допустим, у меня есть два массива:

 $array1 = ['A','B','C','D'];
$array2 = [
   0=>[
     'name'=>'B',
     'number'=>10
 ],
   1=>[
     'name'=>'D',
     'number'=>20
 ]
];
 

Я хочу сравнить $array1 со name столбцом $array2.если значение array1 mathches со $array2' name столбцом s, то соответствующее number значение столбца будет напечатано, в противном случае оно останется пустым.

желаемый результат :

 $array3 = ['','10','','20'];
 

Я пробовал вот так:

 $array3 = [];

foreach($array1 as $key=>$value){

$array3[$key] = (in_array($value,array_column($array2 , 'name'))) ? array2[$key]['number']  : '';
}
 

Это работает не так, как я ожидал.как этого можно достичь?

Комментарии:

1. Как это array2[$key]['number'] должно иметь смысл, учитывая, что ваш ключ $идет от 0 до 3, но в array2 есть только элементы под ключами 0 и 1?

2. вот где я застрял. есть какие-нибудь предложения?

Ответ №1:

Как это array2[$key]['number'] должно иметь смысл, учитывая, что ваш $key идет от 0 до 3, но в array2 есть только элементы под ключами 0 и 1?

Кроме того, отсутствует знак $ перед именем переменной — идите и включите правильное сообщение об ошибках PHP, чтобы PHP мог сообщать вам о подобных ошибках!

Используйте array_search вместо in_array , чтобы получить ключ элемента, найденного в $array2.

 foreach($array1 as $key=>$value){
  $array2key = array_search($value,array_column($array2 , 'name'));
  $array3[] = $array2key !== false ? $array2[$array2key]['number']  : '';
}
 

Ответ №2:

Просто чтобы показать, что есть более чем один способ сделать это:

 $array1 = ['A','B','C','D'];
$array2 = [
   0=>[
     'name' => 'B',
     'number' => 10
   ],
   1=>[
     'name' => 'D',
     'number' => 20
   ]
];

$array3 = [];
foreach ($array1 as $letter) {
    $matches = array_filter($array2, function ($element) use ($letter) {return $element['name']==$letter;});
    if (count($matches)>0) {
        $array3[] = array_values($matches)[0]['number'];
    } else {
        $array3[] = '';
    }
}

print_r($array3);
 

array_filter полезно, если вы хотите возвращать элементы, соответствующие некоторому (сложному) условию, особенно если у вас есть массивы массивов. Хотя сопоставление в данном случае довольно простое.