【问题标题】:Converting array and objects in array to pure array [duplicate]将数组和数组中的对象转换为纯数组[重复]
【发布时间】:2012-05-24 19:07:00
【问题描述】:

我的数组是这样的:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => demo1
        )
    [1] => stdClass Object
        (
            [id] => 2
            [name] => demo2
        )
    [2] => stdClass Object
        (
            [id] => 6
            [name] => otherdemo
        )
)

如何将整个数组(包括对象)转换为纯多维数组?

【问题讨论】:

  • 我想在我的 foreach 循环中使用数组
  • foreach 可用于迭代 stdClass 的实例,就像它可用于迭代数组一样。根据您的需要,无需转换。
  • 为什么不在你的 foreach 循环中使用该对象?

标签: php arrays


【解决方案1】:

你尝试过类型转换吗?

$array = (array) $object;

其实还有一个技巧

$json  = json_encode($object);
$array = json_decode($json, true);

您可以在 PHP 手册中的json_decode 获得更多信息,第二个参数称为 assoc

关联

TRUE时,返回的对象会被转换成关联数组。

这正是您要寻找的。​​p>

你也可以试试这个:Convert Object To Array With PHP (phpro.org)

【讨论】:

  • $array = (array) $object; 不适用于内部子元素
【解决方案2】:

您可以使用array_walk 将每个项目从对象转换为数组:

function convert(&$item , $key)
{
   $item = (array) $item ;
}

array_walk($array, 'convert');

【讨论】:

  • 不适用于具有对象数组的多维对象数组
【解决方案3】:

您应该投射所有对象,例如:

$result = array();
foreach ($array as $object)
{
    $result[] = (array) $object
}

【讨论】:

    【解决方案4】:

    当您使用 OOP 时,最简单的方法是拉取代码以将自身转换为类本身的数组,然后您只需调用此方法并让返回的数组填充您的原始数组。

    class MyObject {
    
        private $myVar;
        private $myInt;
    
        public function getVarsAsArray() {
    
            // Return the objects variables in any structure you need
            return array($this->myVar,$this->myInt);
    
        }
    
        public function getAnonVars() {
    
            // If you don't know the variables
            return get_object_vars($this);
        }
    }
    

    有关get_object_vars()的信息,请参阅:http://www.php.net/manual/en/function.get-object-vars.php

    【讨论】:

      【解决方案5】:

      就用这个吧:

      json_decode(json_encode($yourArray), true);
      

      【讨论】:

      • 易卜拉欣早在 2012 年就已经提供了这种技术。
      【解决方案6】:

      假设你想得到这种纯数组格式:

      Array
      (
        [1] => "demo1",    
        [2] => "demo2",
        [6] => "otherdemo",
      )
      

      那么我会这样做:

      $result = array();
      foreach ($array as $object)
      {
          $result[$object->id] = $object->name
      }
      

      (编辑)实际上这就是我正在寻找的可能不是 OP 正在寻找的。可能对其他搜索者有用。

      【讨论】:

        【解决方案7】:

        如果你有对象并且你想将一个值设置为数组 使用

        $this->object->pluck('name');
        

        然后您将值作为名称数组获取,例如

        ["name1", "name2", "name3"];
        

        【讨论】:

        • 为什么这个答案完全忽略了 OP 提供的数据?
        猜你喜欢
        • 2023-03-25
        • 2023-03-19
        • 2017-08-11
        • 1970-01-01
        • 2016-03-22
        • 2019-08-06
        • 1970-01-01
        相关资源
        最近更新 更多