繁体   English   中英

格式化JavaScript的PHP数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM