构建数组的PHP等价于JavaScript扩展语法吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

关于在Ruby转换功能,JS,现在我想用JS来实现对PHP的事,但不工作,告诉我,我缺少的是什么?

JS上的代码:

function transpose(a) {
    return a.length === 0 ? a : a[0].map((col, i) => a.map((row) => row[i]))
}

function f(a) {
    return a.length === 0 ? [] : [...a.shift(), ...f(transpose(a).reverse())];
} 

console.log(f([[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]))

在PHP中这样做:

function transpose($array) 
{
    if (count($array) === 0) return $array;

    foreach ($array as  $rowkey => $row)
    {
        foreach($row as $colkey => $col)
        {
            $out[$colkey][$rowkey] = $col;
        }
    }

    return $out;
}

function f($a)
{
    return (count($a) === 0) 
    ? [] 
    : [
        array_shift(...$a), 
        f(array_reverse(transpose(...$a)))
    ];
}

print_r(f([[1,2,3,4],[10,11,12,5],[9,8,7,6]]));

有问题吗?错误:

警告:array_shift()只需要在第24行的[...] [...]中给出1个参数,3 在第10行的[...] [...]中为foreach()提供的参数无效 警告:在第10行的[...] [...]中为foreach()提供的参数无效 警告:在第10行的[...] [...]中为foreach()提供的参数无效 警告:在第10行的[...] [...]中为foreach()提供的参数无效 注意:未定义的变量:在第16行的[...] [...]中输出 警告:array_reverse()期望参数1为数组,在第25行的[...] [...]中给出为null警告:count():参数必须是在[...中实现Countable的数组或对象] [...]第21行

提问于
用户回答回答于

array_shift有太多的参数..所有你需要的是$a相同的array_reverse

<?php
function transpose($array)
{
    if (count($array) === 0) return $array;

    foreach ($array as  $rowkey => $row)
    {
        foreach($row as $colkey => $col)
        {
            $out[$colkey][$rowkey] = $col;
        }
    }

    return $out;
}

function f($a)
{
    return (count($a) === 0)
    ? []
    : [
        array_shift($a),
        f(array_reverse(transpose($a)))
    ];
}

print_r(f([[1,2,3,4],[10,11,12,5],[9,8,7,6]]));

结果

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 5
                    [1] => 6
                )

            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => 7
                            [1] => 8
                            [2] => 9
                        )

                    [1] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 10
                                )

                            [1] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => 11
                                            [1] => 12
                                        )

                                    [1] => Array
                                        (
                                        )

                                )

                        )

                )

        )

)
用户回答回答于

(AKA“splat”)运算符在PHP中的位置与JS不同。

此外,splat运算符不能在数组文字中使用,只能在函数调用中使用。在f()函数中的使用相当于array_merge()

function f($a)
{
    return (count($a) === 0) 
    ? [] 
    : array_merge(
        array_shift($a), 
        f(array_reverse(transpose($a)))
    );
}

扫码关注云+社区

领取腾讯云代金券