[英]What is the PHP equivalent of JavaScript spread syntax for constructing an array?
问已经是一个问题,关于在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() 需要 1 个参数,3 个在第 24 行的 [...][...] 中给出
为第 10 行 [...][...] 中的 foreach() 提供的参数无效
警告:为第 10 行 [...][...] 中的 foreach() 提供的参数无效
警告:为第 10 行 [...][...] 中的 foreach() 提供的参数无效
警告:为第 10 行 [...][...] 中的 foreach() 提供的参数无效
注意:未定义变量:第 16 行的 [...][...] 中的 out
警告:array_reverse() 期望参数 1 是数组,在第 25 行的 [...][...] 中给出 null 警告:count():参数必须是数组或在 [... ][...] 在第 21 行
您不需要在 PHP 版本中使用...
运算符。 您只需要将移动的行与递归调用的结果合并。
function f($a)
{
return (count($a) === 0)
? []
: array_merge(
array_shift($a),
f(array_reverse(transpose($a)))
);
}
array_merge(array_shift($a), f(array_reverse(transpose($a))))
这里发生的事情是一样的:
[...a.shift(), ...f(transpose(a).reverse())]
...
在 JS 中扩展数组的元素。 它在 PHP 中的工作方式类似,但在这里它只在函数定义或调用中有效。
您在 PHP 中的...
(又名“splat”)运算符与 JS 中的位置不同。
此外,在 PHP 7.4 之前,splat 运算符不能用于数组文字,只能用于函数调用。 在f()
函数中的使用等效于array_merge()
。
function f($a)
{
return (count($a) === 0)
? []
: array_merge(
array_shift($a),
f(array_reverse(transpose($a)))
);
}
你的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
(
)
)
)
)
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.