[英]PHP - How do I get a specific value of a multidimensional array
我是 PHP 的初学者,所以基本上我有一个没有指定键的数组,只有数组的值。 我想得到去春假的人的名字(== true)。 我试过这个,但它不起作用......
$liste = [
['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true' ],
['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true' ],
['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false' ],
['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true' ],
['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false' ],
['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true' ]
];
foreach($liste as $line){
foreach($line as $value){
if ($value['springbreak'] == true)
echo $value['name'];
}
}
输出应该是:Elsa,Chris,Ken,Tenta
您可以使用array_filter
、 array_map
和join
:
<?php
$liste = [
['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true'],
['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true'],
['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false'],
['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true'],
['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false'],
['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true']
];
// Filter to only keep values with springbreak to true
$springbreak_only = array_filter($liste, function($entry) { return $entry['springbreak'] === 'true'; });
// Grab the names (and ditch the rest)
$springbreak_names = array_map(function($entry) { return $entry['name']; }, $springbreak_only);
// Output the comma-separated names
echo join(', ', $springbreak_names);
使用array_reduce
替代(只会循环一次):
$springbreak_names = array_reduce($liste, function($springbreak_names, $entry) {
if ($entry['springbreak'] === 'true')
$springbreak_names[] = $entry['name'];
return $springbreak_names;
}, []);
echo join(', ', $springbreak_names);
请参阅@don't anger me's answer以获得另一个简单的解决方案,功能较少但也更直接。
注意:如果可以,您可能应该使用布尔值true
而不是'true'
(字符串)。
为什么您现有的代码不起作用?
因为您使用了不必要的两个foreach()
而单个foreach()
可以解决问题。 另一个原因是你像这样比较$line['springbreak'] == true
应该是$line['springbreak'] == 'true'
因此,使用您现有的代码。 咱们试试吧,
foreach($liste as $line){
if ($line['springbreak'] == 'true')
echo $line['name'];
}
为什么不简单的foreach()
循环和implode()
加入 springbreak为true
的名称?
<?php
$liste = [
['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true' ],
['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true' ],
['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false' ],
['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true' ],
['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false' ],
['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true' ]
];
$names = [];
foreach($liste as $list){
if($list['springbreak']=='true'){
$names[] = $list['name'];
}
}
echo implode(',',$names);
?>
输出:
Elsa,Chris,Ken,Tenta
演示: https : //3v4l.org/B7Bo6
你忘记了 if 语句。
foreach($liste as $line){
foreach($line as $value){
if($value['springbreak'] === 'true'){
echo $value['name'];
}
}
}
我想出了以下解决方案:
<?php
$liste = [
['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true' ],
['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true' ],
['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false' ],
['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true' ],
['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false' ],
['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true' ]
];
$going_to_springbreak = array();
//Check every item
foreach($liste as $line){
//Check first if the 'springbreak' is true
if($line['springbreak'] == 'true'){
//Then add the name of that item to the new array
$going_to_springbreak[] = $line['name'];
//OR you can add the entire item to the new array if you want to use the other values
//$going_to_springbreak[] = $line;
}
}
var_dump($going_to_springbreak)
?>
输出:
array(4) {
[0]=>
string(4) "Elsa"
[1]=>
string(5) "Chris"
[2]=>
string(3) "Ken"
[3]=>
string(5) "Tenta"
}
最后,我强烈建议将“真”或“假”值存储为原始值,因此:
'springbreak' => true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.