#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
полезно, если вы хотите возвращать элементы, соответствующие некоторому (сложному) условию, особенно если у вас есть массивы массивов. Хотя сопоставление в данном случае довольно простое.