如何将php对象数组从一种形式转换为另一种形式

如何将php对象数组从一种形式转换为另一种形式,php,Php,有没有一种简单的方法可以从中转换对象数组 stdClass Object ( [Title] => Array ( [0] => Title 1 [1] => Title 2 [2] => Title 3 [3] => Title 4 ) [description] => Array (

有没有一种简单的方法可以从中转换对象数组

stdClass Object
(
    [Title] => Array
        (
            [0] => Title 1
            [1] => Title 2
            [2] => Title 3
            [3] => Title 4
        )

    [description] => Array
        (
            [0] => Description 1
            [1] => Description 2
            [2] => Description 3
            [3] => Description 4
        )

    [myimage] => Array
        (
            [0] => images/events/568a7048f22f9/sizes/athens-img_XS.jpg
            [1] => images/collections/56b2294894c08/islamiki.png
            [2] => images/multimedia/item6.jpg
            [3] => 
        )

)
为此:

stdClass Object
(

    [0] => Array
        (
            [Title] => Title 1
            [description] => Description 1
            [myimage] => images/events/568a7048f22f9/sizes/athens-img_XS.jpg
        )

    [1] => Array
        (
            [Title] => Title 2
            [description] => Description 2
            [myimage] => images/collections/56b2294894c08/islamiki.png
        )

    [2] => Array
        (
            [Title] => Title 3
            [description] => Description 3
            [myimage] => images/multimedia/item6.jpg
        )

    [3] => Array
        (
            [Title] => Title 4
            [description] => Description 4
            [myimage] => 

        )
)
这很有趣

将“2d矩阵”-列转换为行。(意识到这一点——在我写了几个月之后)

  • 每个输出条目由一个关联的数组组成:

  • 关键是属性名

  • 该数据是该属性的“当前列数据”

使用该功能的演示:

现在,只要数据一致,关于每个属性的属性数和数据行数:

您可以更改数据,而无需更改代码

守则: 步骤说明。 我将只评论那些涉及更多的

步骤1:

我们需要属性名和数据数组作为
关联数组
,属性名作为“键”和相关数据

这只是一个二维数组,其中“键”是原始属性名 数据是与该属性关联的值的数组

步骤2:

获取“每个输出项的属性名称”。这些是
步骤1
中的数组键

你想要多少就有多少

步骤3:

这是工作开始的地方

我们将通过“2D数组”获取
垂直切片。这就是
array\u column
所做的

我们需要知道实际有多少列数据。但是,它是一个
关联数组
,我们不知道密钥名称

不是问题:

“当前函数”返回
2D数组的当前条目的值
然后数一数并保存它

为了提高效率,我在“for”循环的
初始化部分执行此操作

步骤4:

我们需要通过
2D数组
获得
当前列($i)
垂直切片

步骤5:

我们现在有:

  • 条目的键列表($rowKeys)
  • 一个数据数组,其中每个条目与相应的“属性”匹配
因此,创建条目并将其添加到输出中

步骤7:


将数组转换回一个
stdClass
对象。

看看这不是相对的。我认为你甚至不可能理解这个问题。您想要一个代码示例吗?迭代和数组列是我能想到的最简单的处理方法。你没有错,我确实误解了。假设您希望转换为数组而不是对象?我问的是,我只是问如何将一种东西转换成另一种东西。就这么简单。两者都是保存相同信息的stdObject。它只是表示相同信息的不同结构。我在想是否有一种简单的方法来代替循环和重建对象。所有数组的长度都是一样的。谢谢你的确认。我现在需要解释代码的工作原理…:)比我的整洁,+1没关系,我理解代码。我只是在想是否还有其他更简单的方法。@themis,也许有用?您可以添加更多属性数组,而无需更改代码,因为它在任何地方都不使用数据数组索引。
// ---------------------------------------------------------------------------
// output in here...
$outArray = array();                         // (step 0)

$propsAsArray = get_object_vars($srcObject);  // (step 1) properties as an array

$rowKeys = array_keys($propsAsArray);         // (step 2) we need the the key names

for ($i = 0, $itemCount = count(current($propsAsArray)); $i < $itemCount; $i++) { // (step 3)

    $column = array_column($propsAsArray, $i); // (step 4) get one vertical column through al the arrays

    $entry = array_combine($rowKeys, $column); // (step 5)

    $outArray[] = $entry;                      // (step 6) 
}

$outArray = (object) $outArray;               // (step 7)
function convertArray($srcObject) {
    $propsAsArray = get_object_vars($srcObject);  
    $rowKeys = array_keys($propsAsArray);         

    for ($i = 0, $itemCount = count(current($propsAsArray)); $i < $itemCount; $i++) { 

        $outArray[] = array_combine($rowKeys, 
                                    array_column($propsAsArray, $i)); 
    }

    return (object) $outArray;              
}
stdClass Object
(
    [0] => Array
        (
            [Title] => Title 1
            [description] => Description 1
            [myimage] => images/events/568a7048f22f9/sizes/athens-img_XS.jpg
        )

    [1] => Array
        (
            [Title] => Title 2
            [description] => Description 2
            [myimage] => images/collections/56b2294894c08/islamiki.png
        )

    [2] => Array
        (
            [Title] => Title 3
            [description] => Description 3
            [myimage] => images/multimedia/item6.jpg
        )

    [3] => Array
        (
            [Title] => Title 4
            [description] => Description 4
            [myimage] => 
        )
)