Php 获取另一个元素已知的数组元素?
所以我需要得到什么等于$what的地图 例如,如果$b4的结果应该是74,76,77,83;等等Php 获取另一个元素已知的数组元素?,php,arrays,Php,Arrays,所以我需要得到什么等于$what的地图 例如,如果$b4的结果应该是74,76,77,83;等等 我该怎么做呢?您所要做的就是在地图中循环并比较值 Array ( [0] => Array ( [what] => b4 [map] => 74,76,77,83 ) [1] => Array ( [what] => b2
我该怎么做呢?您所要做的就是在地图中循环并比较值
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:
function abc($what){
$map = [...];
foreach($map as $item) {
if (isset($item[$what]) ) {
return $item["map"];
}
}
return false;
}
可以在此处找到一个可用的fiddle:如果您只需要数组中的1个值,可以在匹配的地方使用foreach和return语句:
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'];
}
我认为遍历数组很容易阅读和理解:
$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;
}
如果要定期访问数据和what is unique,请使用带有第三个参数的array_列作为要用作键的列。那么,您的阵列就可以轻松访问,并且在这个答案中不会损坏任何循环
<?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");
给
$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'];
到目前为止,您尝试了什么?在函数abc'$What'@NigelRen中不应该有引号,谢谢,对了。@dev null resident long story short-我从数据库中获取这个数组,并且尽量避免经常查询数据库。为什么不使用循环并将数组作为参数传递呢?在这个答案中,upvote for和no loops都是有害的-无论如何,这是一个聪明的解决方案!Null表示返回与所选内容相关的相同数组。只要运行代码和var_dump$array,您就会看到。在第二个参数中使用null意味着保持整个元素的原样。请尝试打印\u r$数组以查看results@Jeff我很确定在后台有一个循环。Php是一个循环,你认为它是如何执行任何代码的。这是我看到的唯一可以找到多个项目的答案。如果我理解正确,则返回或覆盖所有其他内容。@Andreas可能是,但这不是问题中提到的明确要求。。所有其他答案都可以很容易地修改,以在结果数组中收集匹配项…我知道。我只是想告诉任何一个将来看到答案的人。
<?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");
$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