我们有一个多维数组,目前看起来像这样。
[totalsByYardHand] =>
[Jon Doe] =>
[Delivieries] => 6
[Pickups] => 5
[Errors] => 8
[Fred] =>
[Delivieries] => 6
[Pickups] => 5
[Errors] => 8
由于我们将此数组传递给JavaScript并希望维护顺序,因此我们需要将其正确格式化。我们想要采用数组并将其格式化。
Array
(
[totalsByYardHand] => Array
(
[0] => Array
(
[0] => Jon Doe
[1] => Array
(
[0] => Array
(
[0] => Deliveries
[1] => 6
)
[1] => Array
(
[0] => Pickup
[1] => 6
)
[2] => Array
(
[0] => Errors
[1] => 1
)
)
)
[1] => Array
(
[0] => Fred
[1] => Array
(
[0] => Array
(
[0] => Deliveries
[1] => 6
)
[1] => Array
(
[0] => Pickup
[1] => 6
)
[2] => Array
(
[0] => Errors
[1] => 1
)
)
)
)
)
我们最接近的尝试是像这样的递归函数,但无法弄清楚如何将原始数组中的数组键添加到新格式化的数组中。
function array_values_recursive($array)
{
$array = array_values($array);
for ($i = 0, $n = count($array); $i < $n; $i++) {
$element = $array[$i];
if (is_array($element)) {
$array[$i] = $this->array_values_recursive($element);
}
}
return $array;
}
答案 0 :(得分:1)
这很有趣!我不擅长递归,所以我喜欢挑战!如果这是你想要的,请告诉我。
$testArray = [
'totalsByYardHand' => [
'Jon Doe' => [
'Deliveries' => 6,
'Pickups' => 5,
'Errors' => 8
],
'Fred' => [
'Deliveries' => 8,
'Pickups' => 5,
'Errors' => 6
],
'Mary Jane' => [
'Deliveries' => 1,
'Pickups' => 2,
'Errors' => 4
],
]
];
function customArrayFormat($array) {
$newArr = [];
$arrayKeys = array_keys($array);
for ($i=0; $i < count($array); $i++) {
$newArr[$i] = [
0 => $arrayKeys[$i],
1 => (is_array($array[$arrayKeys[$i]]) ? customArrayFormat($array[$arrayKeys[$i]]) : $array[$arrayKeys[$i]])
];
}
return $newArr;
}
print_r(customArrayFormat($testArray));
输出:
Array
(
[0] => Array
(
[0] => totalsByYardHand
[1] => Array
(
[0] => Array
(
[0] => Jon Doe
[1] => Array
(
[0] => Array
(
[0] => Deliveries
[1] => 6
)
[1] => Array
(
[0] => Pickups
[1] => 5
)
[2] => Array
(
[0] => Errors
[1] => 8
)
)
)
[1] => Array
(
[0] => Fred
[1] => Array
(
[0] => Array
(
[0] => Deliveries
[1] => 8
)
[1] => Array
(
[0] => Pickups
[1] => 5
)
[2] => Array
(
[0] => Errors
[1] => 6
)
)
)
[2] => Array
(
[0] => Mary Jane
[1] => Array
(
[0] => Array
(
[0] => Deliveries
[1] => 1
)
[1] => Array
(
[0] => Pickups
[1] => 2
)
[2] => Array
(
[0] => Errors
[1] => 4
)
)
)
)
)
)
答案 1 :(得分:1)
我认为重写数组可能不那么聪明......现在函数只会将原始数据中的每个(键,值)对变为[key,value]数组。
function array_values_recursive($array)
{
$ret = array();
foreach($array as $key => $value) {
if (is_array($value)) {
$ret[] = array($key, $this->array_values_recursive($value));
} else {
$ret[] = array($key, $value);
}
}
return $ret;
}
此外,当数组具有数字键时,它将与json_encode
很好地配合,因为在这些情况下它将数组保持为数组。