PHP 使用 foreach 显示array_filtered结果似乎是错误的 - 有没有一种不那么肮脏的方法?

PHP Displaying an array_filtered result using foreach seems wrong - Is there a less dirty way?

提问人:rmoss3475 提问时间:10/13/2022 最后编辑:rmoss3475 更新时间:10/15/2022 访问量:29

问:

我们有一系列宠物,有名字和种类的定义。

$dogs = array_filter($pets, 
    fn($v) => $v["species"]=="Dog");

foreach($dogs as $row) echo $row["name"];

在如此漂亮的箭头函数之后,显示结果的 foreach 似乎是错误的。

我错过了什么吗?

PHP 函数式编程

评论

0赞 KamiKaze 10/13/2022
您得到什么输出或错误消息
0赞 KamiKaze 10/13/2022
print_r($dogs);它是如何工作的
0赞 CBroe 10/14/2022
“美丽”是高度主观的......我更喜欢一目了然地“告诉”我发生了什么的代码,而不是很多时候花哨的嵌套特定数组函数。但也许你在这里更快乐,而不是像这样的东西......echo implode(', ', array_column($dogs, 'name'));
0赞 rmoss3475 10/15/2022
谢谢CBroe。这正是我所追求的。

答:

0赞 rmoss3475 10/13/2022 #1
foreach(array_filter($pets, 
    fn($v) => $v["species"]=="Dog") as $row) echo $row["name"];

或者,用 implode() 和 array_column() 替换 foreach 循环:

echo implode(", ", 
        array_column(
            array_filter($pets, fn($v) => $v["species"]=="Dog"), 
            "name")
    );

我猜后者的功能更严格。

0赞 D. Dimopoulos 10/13/2022 #2

https://www.php.net/manual/en/function.array-filter

<?php

    $pets = array(
        array('name'=>'Jack', 'species'=>'Dog'),
        array('name'=>'Jina', 'species'=>'Cat')
     );

     function select_dog($var)
     {
        return $var["species"]=="Dog";
     }

    $dogs = array_filter($pets, 'select_dog');

    foreach($dogs as $row) echo $row["name"]

?>