有没有一种从这里转换对象数组的简单方法
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)
这是有趣的...
将'2d矩阵' - 列转换为行.(意识到这样做 - 我写完之后几个月)
每个输出条目都包含一个关联的数组:
关键是属性名称
现在,只要数据一致,就每个属性的属性数和数据行数而言:
您无需更改代码即可更改数据.
每个条目的两个额外属性和三个额外的条目... 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 slice的current column ($i)通过2D array.
第5步:
我们现在有:
因此,请输入并将其添加到输出中.
第7步:
将数组转换回stdClass对象.