在下面的数组中,我想搜索firstname,例如tom,然后回显键“library”和“canteen”的名称,因为在这两个中都存储了名字为tom的人。
这是print_r($ school);
的输出Array
(
[library] => Array
(
[0] => Array
(
[firstname] => tom
[lastname] => brown
)
)
)
Array
(
[canteen] => Array
(
[0] => Array
(
[firstname] => matt
[lastname] => smith
)
[1] => Array
(
[firstname] => tom
[lastname] => jones
)
)
)
我已经使用foreach循环多次尝试但没有成功。我必须承认,我并不完全熟悉他们的工作方式。
这是我尝试过的:
foreach ($school as $k => $v) {
if ($v['firstname'] == 'tom'){
echo 'Currently at the '.$k.'<br>';
}
}
这是输出的结果:
Currently at the library
Currently at the canteen
答案 0 :(得分:0)
你需要另一个foreach循环
foreach ($school as $k => $v) {
foreach($v as $key => $value){
if ($value['firstname'] == 'tom'){
echo 'Currently at the ' . $k;
}
}
}
答案 1 :(得分:0)
问题是你只是通过第一维迭代,但你的数组是二维的。这是固定代码:
foreach ($school as $k => $va) { //Iterate trough the array $school($k is the key and $va is the value)
foreach($va as $v) { //Iterate trough $va, this is a multidimensional array. $v is the value.
if ($v['firstname'] == 'tom'){
echo 'Currently at the '.$k; //$k is still storing the key from the first foreach.
}
}
}
Foreach并不难,但你需要先了解它。
这是“计算机说什么”母鸡运行代码:
好的,通过阵列$ school迭代了。现在我将密钥库存储在$ k中,并将值数组(...)存储在$ va中
哦,另一个foreach ......现在我应该循环$ va($ school ['library']的价值)。我应该将$ v ['firstname']设置为'tom',将lastname设置为'brown'
检查没问题,回复关键'库'
Foreach退出,不再进入“图书馆”。
第一个foreach还活着:它应该将$ k设置为食堂,将$ va设置为array(...)
开始新的foreach,迭代$ va($ school ['canteen']),把关键'食堂'放到$ k ...
$ v现在为Array(“firstname”=&gt;“matt”,“lastname”=&gt;“smith”);
名字不是'汤姆'。来自学校[食堂]的下一个价值
$ v现在为Array(“firstname”=&gt;“tom”,“lastname”=&gt;“jones”);
名字是汤姆,回声来自$ k的钥匙,它是'食堂'
数组结束,两个foreach出口。
答案 2 :(得分:0)
如果$ school是外部数组,那么你可以这样做:
foreach ($school as $k => $v) {
foreach($v as $key=>$value{
if ($value['firstname'] == 'tom'){
echo 'Currently at the '.$key;
}
}
}
答案 3 :(得分:0)
您正在使用多维数组。因此,您需要使用两个foreach循环来遍历每个数组。