【问题标题】:Implode all the properties of a given name in an array of object - PHP [duplicate]在对象数组中内爆给定名称的所有属性 - PHP [重复]
【发布时间】:2011-04-06 05:18:56
【问题描述】:

有没有办法将数组中包含的相似对象的值内爆?我有一个对象数组:

$this->inObjs

我想要每个messageID 属性的逗号分隔字符串:

$this->inObjs[$i]->messageID

有没有一种优雅的方法来做到这一点,还是我必须MacGyver 使用get_object_varsforeachs 或类似的解决方案?感谢您的帮助。

【问题讨论】:

    标签: php csv implode arrays


    【解决方案1】:
    $allMessageID = '';
    foreach ($this->inObjs as $objectDetail) :
        $allMessageID[] = $objectDetail->messageID;
    endforeach;
    
    $allMessageID_implode = implode(",", $allMessageID);
    
    echo $allMessageID_implode;
    

    【讨论】:

      【解决方案2】:

      如果可以修改类,可以实现__toString:

      class MyObject {
          private $messageID = 'Hello';
          public function __toString() {
              return $this->messageID;
          }
      }
      // ...
      $objectList = array(new MyObject, new MyObject);
      echo implode(',', $objectList);
      // Output: Hello,Hello
      

      【讨论】:

        【解决方案3】:

        我发现最简单的方法是使用array_map

        $messageIDs = array_map( function($yourObject) { return $yourObject->messageID; }, $this->inObjs );
        $string = implode(", ", $messageIDs );
        

        【讨论】:

          【解决方案4】:
          $messageIDArray;
          foreach($this->inObjs as $obj){
             $messageIDArray[] = $obj->messageID;
          }
          
          $string = implode(',',$messageIDArray);
          

          【讨论】:

          • 他说他知道foreach
          • 我不知道他找到了什么解决方案,所以我写了我的。只是一个词 foreach 对我来说没有任何意义......
          • 第一行应该是$messageIDArray = [];
          【解决方案5】:

          我通常针对这种情况做一个Helper,这样使用

          function GetProperties(array $arrOfObjects, $objectName) { $arrProperties = array(); foreach ($arrOfObjects as $obj) { if ($obj->$objectName) { $arrProperties[] = $obj->$objectName; } } return $arrProperties; }

          【讨论】:

            【解决方案6】:

            这里有两个班轮:

            array_walk($result, create_function('&$v', '$v = $v->property;'));
            $result = implode(',', $result);
            

            或者:

            array_walk($result, function(&$v, &$k) use (&$result) { $v = $v->name; } );
            $result = implode(',', $result);
            

            $v->property 是您要内爆的对象属性名称。

            另见array_map()

            【讨论】:

            • 为什么我在这里看到, &$kuse (&$result)?请重温这篇文章。我想用这个页面关闭另一个。
            猜你喜欢
            • 1970-01-01
            • 2021-09-26
            • 2016-06-30
            • 1970-01-01
            • 2019-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-09
            相关资源
            最近更新 更多