【发布时间】:2020-06-01 09:36:11
【问题描述】:
重构 PHP 数组数据。 测试“数据块 1”工作正常,数据在 $newArray_1 中正确分解,最后在 $newArray_2 中排序。我并没有真正使用explode,而是选择将其保留在代码中,因为稍后将使用它来提取新数组中所需的键名。
问题:是否可以使用相同的代码库来解决“数据块 2”的相同处理?
我的代码:
// Unsorted array -------------------------------------
$frontendData = [
'datasheet' => [
'Name_1_balance0' => 1, // Data block 1
'Name_1_balance2' => 3, // Data block 1
'Name_1_balance3' => 4, // Data block 1
'Name_1_balance1' => 2, // Data block 1
// 'Name_2_balance0' => 5, // Data block 2
// 'Name_2_balance2' => 7, // Data block 2
// 'Name_2_balance3' => 8, // Data block 2
// 'Name_2_balance1' => 6, // Data block 2
]
];
ksort($frontendData['datasheet']);
print_r($frontendData);
// Explode array -------------------------------------
$newArray_1 = [];
foreach ( $frontendData as $mainKey => $elements ) {
foreach ( $elements as $subKey => $value ){
$newData = explode("_", $subKey);
$newData[] = $value;
$newArray_1[$mainKey][] = $newData;
}
}
print_r($newArray_1);
// Restructure array -------------------------------------
$newArray_2['datasheet'] = ['Name_1'];
for ($i=0; $i <=3 ; $i++) {
$newArray_2['datasheet'][1]['balance'][$i] =
$newArray_1['datasheet'][$i][3];
}
print_r($newArray_2);
结果(处理“数据块 1”):
Array
(
[datasheet] => Array
(
[0] => Name_1
[1] => Array
(
[balance] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
)
)
)
想要的结果(处理“数据块 1”和“数据块 2”):
Array
(
[datasheet] =>
Array
(
[0] => Name_1
[1] => Array
(
[balance] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
)
),
Array
(
[0] => Name_2
[1] => Array
(
[balance] => Array
(
[0] => 5
[1] => 6
[2] => 7
[3] => 8
)
)
)
)
【问题讨论】:
-
为什么
balance的额外级别的数组? -
@Nick 在某些情况下,我需要对数据进行循环迭代,然后使用索引而不是键名更容易获得键。
-
这些答案之一是否解决了您的问题?如果没有,您能否提供更多信息来帮助回答?
-
很高兴听到。如果您担心我的答案提供的数据顺序,您可以在循环之前始终
ksort($frontendData['datasheet']);。
标签: php arrays sorting multidimensional-array php-7.3