繁体   English   中英

PHP - 如何获取多维数组的特定值

[英]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_filterarray_mapjoin

<?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()加入 springbreaktrue的名称

<?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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM