получить элемент массива, где другой элемент известен?

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; и так далее.

Как я могу это сделать?

0

Решение

С 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

3

Другие решения

Если вы собираетесь получать доступ к данным на регулярной основе и 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
4

Я думаю, что «прогуливаясь» по массиву легко читать и понимать:

<?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");
2

Все, что вам нужно сделать, это просмотреть вашу карту и сравнить значения.

function abc($what){
$map = [...];
foreach($map as $item) {
if (isset($item[$what]) ) {
return $item["map"];
}
}
return false;
}
1

Если вы просто хотите получить 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

демонстрация

1

https://ideone.com/V9WNNx

$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;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector