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

the*_*mhz 3 php

有没有一种从这里转换对象数组的简单方法

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] => 
        )

)
Run Code Online (Sandbox Code Playgroud)

对此:

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] => 

        )
)
Run Code Online (Sandbox Code Playgroud)

Rya*_*ent 5

这是有趣的...

将'2d矩阵' - 列转换为行.(意识到这样做 - 我写完之后几个月)

  • 每个输出条目都包含一个关联的数组:

  • 关键是属性名称

  • 数据是该属性的"当前列数据"

在eval.in演示

演示使用该功能:

1)原始数据 - 调用函数.... Eval.in

现在,只要数据一致,就每个属性的属性数和数据行数而言:

您无需更改代码即可更改数据.

每个条目的两个额外属性和三个额外的条目... Eval.in

代码:

// ---------------------------------------------------------------------------
// 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)
Run Code Online (Sandbox Code Playgroud)

作为一个功能:

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;              
}
Run Code Online (Sandbox Code Playgroud)

输出:

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] => 
        )
)
Run Code Online (Sandbox Code Playgroud)

步骤说明.

我只会评论更多involved ones.

步骤1:

我们需要将属性名称和数据数组作为associated array属性名称作为"键"和相关数据.

这只是一个二维数组,其中'keys'是原始属性名称,data是与该属性关联的值的数组.

第2步:

获取每个输出条目的"属性名称".这些是数组的键step 1.

可以有多少你想要的.

第三步:

这是工作开始的地方......

我们将vertical slices通过'2D阵列'.这是做什么的array_column.

我们需要知道columns实际存在多少数据.但是,它是一个associated array,我们不知道关键名称.

不是问题:

'current function'返回当前条目的值2D array 然后只需计算并存储它.

我这样做是initialization part of 'for' loop为了提高效率.

第4步:

我们需要得到vertical slicecurrent column ($i)通过2D array.

第5步:

我们现在有:

  • 条目的键列表($ rowKeys)
  • 一个数据数组,其中每个条目与相应的"属性"匹配

因此,请输入并将其添加到输出中.

第7步:

将数组转换回stdClass对象.