重组PHP数组数据。测试“数据块1”工作正常,并且数据在$ newArray_1中正确分解,最后在$ newArray_2中排序。我并没有真正使用爆炸,而是选择将其保留在代码中,因为以后将使用它在新数组中提取所需的键名称。
问题:是否可以使用相同的代码库以相同的方式处理“数据块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
)
)
)
)
尝试一下
<?php
// 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 = array();
$key='';
$i = 0;
foreach ( $frontendData['datasheet'] as $mainKey => $elements ) {
$newData = explode("_", $mainKey);
if(sizeof($newData)>=3){
$newkey=$newData[0].'_'.$newData[1];
if($newkey!=$key){
$key=$newkey;
array_push($newArray_1,array());
array_push($newArray_1[$i], $newkey);
array_push($newArray_1[$i], array());
$k=array();
array_push($k, $elements);
$newArray_1[$i][1]=array('balance' => $k);
$i++;
}else{
array_push($newArray_1[$i-1][1]['balance'], $elements);
}
}
}
echo "<pre>";
print_r($newArray_1);
echo "</pre>";
// Restructure array -------------------------------------
//$newArray_2['datasheet'] = ['Name_1'];
?>
您可以遍历$frontendData
数组,使用preg_match
提取名称和余额编号(从而避免对数组进行排序),并使用由名称索引的值构建结果数组。然后,我们使用array_values
对数组进行数字索引,然后将其分配给输出中的datasheet
键:
$result = array();
foreach ($frontendData['datasheet'] as $key => $balance) {
preg_match('/^(\w+)_balance(\d+)$/', $key, $match);
$result[$match[1]][0] = $match[1];
$result[$match[1]][1]['balance'][$match[2]] = $balance;
}
$result = array('datasheet' => array_values($result));
print_r($result);
输出(用于样本数据):
Array
(
[datasheet] => Array
(
[0] => Array
(
[0] => Name_1
[1] => Array
(
[balance] => Array
(
[0] => 1
[2] => 3
[3] => 4
[1] => 2
)
)
)
[1] => Array
(
[0] => Name_2
[1] => Array
(
[balance] => Array
(
[0] => 5
[2] => 7
[3] => 8
[1] => 6
)
)
)
)
)