【问题标题】:output one property for all objects in array [closed]为数组中的所有对象输出一个属性[关闭]
【发布时间】:2012-03-13 10:22:31
【问题描述】:

什么是为数组中的每个对象输出属性的快速而简洁的方法。例如:

$array=[object1,object2,object3];

现在我只需要获取每个对象的名称:

object->name;

并输出为类似

的字符串
name1,name2,name3

我不喜欢用for循环,我猜php里面有一个快捷的方法,请指教。谢谢。

【问题讨论】:

标签: php arrays


【解决方案1】:

使用array_map 将对象数组投影到属性值数组中;之后implode 可以让你成为一个漂亮的小字符串:

$array = [ /* ... */ ];
echo implode(',', array_map(function($el) { return $el->name; }, $array));

【讨论】:

  • 不错的选择,但它怎么会比循环更快?
  • @StevenDeGroote:首先,问题中没有提到更快。也就是说,虽然我当然不知道它是否会更快,但我绝对可以看到它可能如何更快:array_map 直接用 C 实现,而 foreach 实现作为 PHP VM 的一部分,它(通常)应该慢得多。另一方面,我希望 foreach 会进行大量优化,因为它很常见,因此我不能不测量。
  • 这就是我要找的,只有一行代码。谢谢。
  • @bingjie2680 仅仅因为它的一行代码并没有让它变得更好。你也可以将你的 foreach 写成一行代码。单行是不是某种 l33t $k1ll。您应该编写可读的代码。上面可以很容易地格式化为跨越三到五行代码以提高可读性。
  • @bingjie2680:正如其他人所说;这不是“更好”,因为它是一行或一个语句。它可能会更好,因为它无副作用且可链接,但不要只见树木不见森林。
【解决方案2】:

好吧,你可以使用 foreach 循环:

 foreach ($array as $value) {
      $value->name;
 }

如果您不知道数组中有多少个元素,我不知道如何在没有任何循环的情况下做到这一点。

【讨论】:

    【解决方案3】:

    天哪!循环有什么问题?它是最基本的编程结构之一。

    当然,你可以使用闭包来代替:

    array_walk($array, function($item) {
       echo $item->name . ",";
    });
    

    或:

    echo implode(",", array_map(function($item) {
       return $item->name;
    }, $array));
    

    但这真的比理解更容易吗:

    foreach($array as $item) {
      echo $item->name . ",";
    }
    

    现在请克服在编程中需要循环的事实。很多!

    【讨论】:

      【解决方案4】:

      你是说喜欢

      $str = $array[0]->name . ',' .
      $array[1]->name . ',' .
      $array[2]->name;
      

      如果你希望它是动态的,那么你必须迭代:

      $str = '';
      foreach($array AS $object){
        $str .= ',' . $object->name;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-09
        • 2018-02-08
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多