有没有一种简单的方法可以从中转换对象数组
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] =>
)
)
这很有趣...
将"二维矩阵"(列转置为行(。(意识到它做到了这一点 - 在我写它几个月后(
-
每个输出条目由一个关联的数组组成:
-
关键是属性名称
- 数据是该媒体资源的"当前列数据"
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)
作为一个函数:
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] =>
)
)
步骤说明。
我只会评论更involved ones
.
第 1 步:
我们需要属性名称和数据数组作为associated array
,属性名称作为"键"和相关数据。
这只是一个二维数组,其中"键"是原始属性名称数据是与该属性关联的值的数组。
第 2 步:
获取"每个输出条目的属性名称"。这些是 step 1
中的数组键。
您可以随心所欲地拥有尽可能多的数量。
步骤3:
这是工作开始的地方...
我们将通过"2D 数组"进行vertical slices
。这就是array_column
所做的。
我们需要知道实际有多少columns
数据。但是,这是一个associated array
,我们不知道键名。
不是问题:
"当前函数"返回2D array
的当前条目的值然后只需计算并存储它。
我这样做是为了提高效率initialization part of 'for' loop
。
第 4 步:
我们需要通过2D array
获得current column ($i)
的vertical slice
.
第 5 步:
我们现在有:
- 条目的键列表 ($rowKeys(
- 一个数据数组,其中每个条目都与相应的"属性"匹配
因此,输入并将其添加到输出中。
第 7 步:
将数组转换回stdClass
对象。