Array
(
[0] => Array
(
[what] => b4
[map] => 74,76,77,83
)
[1] => Array
(
[what] => b2
[map] => 53,82
)
[2] => Array
(
[what] => b1
[map] => 36
)
)
abc('b4');
function abc($what){
$map = // element `map` where `what` = $what;
}
Итак, мне нужно получить map
, где what
равен $what
;
Например, если $what
- это b4
, результат должен быть 74,76,77,83
; и так далее.
Как я могу это сделать?
У вас не должно быть цитат в function abc('$what')
@NigelRen, спасибо, правильно.
Короче говоря, @ dev-null-dweller - я получаю этот массив из базы данных и стараюсь избегать частых запросов к базе данных.
Почему бы не использовать цикл и не передать массив в качестве параметра?
Результат базы данных цикла @Thefourthbird или элементы массива? Не могли бы вы привести пример, пожалуйста?
Зациклить массив как 3v4l.org/MZF3Y
echo $array[array_search("b4", array_column($array, 'what'))]['map'];
-> 3v4l.org/0NpcXВсе, что вам нужно сделать, это просмотреть карту и сравнить значения.
function abc($what){
$map = [...];
foreach($map as $item) {
if (isset($item[$what]) ) {
return $item["map"];
}
}
return false;
}
С помощью array_search () и array_column () вы можете получить соответствующий $map
в одной строке:
<?php
$array = Array
(
Array
(
"what" => "b4",
"map" => "74,76,77,83"
),
Array
(
"what" => "b2",
"map" => "53,82"
),
Array
(
"what" => "b1",
"map" => "36"
)
);
function abc($array, $what) {
return $array[array_search($what, array_column($array, 'what'))]['map'];
}
echo abc($array, "b4");
Функция деконструирована и объяснена:
function abc($array /* the complete input array */, $what /* the search string */) {
// get the key of the sub-array that has $what in column 'what':
$key = array_search($what, array_column($array, 'what'));
// use that key to get 'map' on index $key
return $array[$key]['map'];
}
Рабочую скрипку можно найти здесь: https://3v4l.org/0NpcX
Если вам просто нужно 1 значение из массива, вы можете использовать оператор foreach и return, где есть совпадение:
$a = [
[
"what" => "b4",
"map" => "74,76,77,83"
],
[
"what" => "b2",
"map" => "53,82"
],
[
"what" => "b1",
"map" => "36"
]
];
function abc($what, $arrays)
{
foreach ($arrays as $array) {
if ($array['what'] === $what) {
return $array['map'];
}
}
return false;
}
echo(abc('b4', $a)); // 74,76,77,83
$arr[] = [
'what' => 'b4',
'map' => '74,76,77,83'
];
$arr[] = [
'what' => 'b2',
'map' => '53,82'
];
$arr[] = [
'what' => 'b1',
'map' => '36'
];
echo abc('b4', $arr);
function abc($what, $arr){
$map = null;
$idx = array_search($what, array_column($arr, 'what'));
if ($idx !== false) {
$map = $arr[$idx]['map'];
}
return $map;
}
Я думаю, что «ходить» по массиву легко и понятно:
<?php
$map = [
[
'what' => "b4",
'map' => "74,76,77,83"
],
[
'what' => "b2",
'map' => "53,82"
],
[
'what' => "b1",
'map' => "36"
]
];
function lookupWhatInMap(&$map, $what) {
array_walk($map, function($entry, $key) use ($what) {
if ($entry['what'] == $what) {
print_r($entry['map']);
}
});
}
lookupWhatInMap($map, "b4");
На мой взгляд, это единственный ответ, в котором можно найти более одного предмета. Все остальные верните или перезапишите, если я правильно понимаю.
@Andreas Может быть, но это не явное требование, упомянутое в вопросе .. И все другие ответы можно легко изменить для сбора совпадений в массиве результатов ...
Я знаю. Просто хотел сказать об этом всем, кто будет искать ответы в будущем.
Если вы собираетесь получать доступ к данным на регулярной основе и what
уникален, используйте array_column()
с третьим параметром в качестве столбца для использования в качестве ключа. Тогда ваш массив легко доступен с what
, и в этом ответе не пострадают никакие петли ...
$array = Array
(
Array
(
"what" => "b4",
"map" => "74,76,77,83"
),
Array
(
"what" => "b2",
"map" => "53,82"
),
Array
(
"what" => "b1",
"map" => "36"
)
);
$array = array_column($array, null, "what");
echo $array['b4']['map'];
дает ...
74,76,77,83
Проголосовать за "и в этом ответе не пострадают никакие петли" - В любом случае, умное решение!
Нулевое значение означает возврат того же массива, ассоциативно связанного с «что». Просто запустите код и массив var_dump $, и вы увидите.
Использование null во втором параметре означает сохранение всего элемента как есть. Попробуйте print_r ($ array), чтобы увидеть результаты
@ Джефф Я уверен, что под капотом есть петля.
Php - это цикл, как вы думаете, он выполняет любой код
что ты уже испробовал?