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
; и так далее.
Как я могу это сделать?
С 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
Если вы собираетесь получать доступ к данным на регулярной основе и 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
Я думаю, что «прогуливаясь» по массиву легко читать и понимать:
<?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");
Все, что вам нужно сделать, это просмотреть вашу карту и сравнить значения.
function abc($what){
$map = [...];
foreach($map as $item) {
if (isset($item[$what]) ) {
return $item["map"];
}
}
return false;
}
Если вы просто хотите получить 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;
}