[英]Formatting PHP array for Javascript
我们有一个当前看起来像这样的多维数组。
[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;
}
这样做很有趣! 我不擅长递归,所以我喜欢挑战! 让我知道这是否是您想要的。
$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
)
)
)
)
)
)
我认为重写数组可能并不那么聪明……该函数现在只会将原始数组中的每个(键,值)对都变成一个[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
很好地配合使用,因为在这种情况下,它将数组保留为数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.