我有一个数组输出。它应该有一组元组。我在从for循环运行时创建这些元组。(我的代码的简化版本-逻辑相同,但$ind是以更复杂的方式计算的)
$output = Array();
$length = count($data);
for ($i = 0; $i < $length; $i++) {
$ind = $i - ($i % 2);
array_push($output[$ind], $data[$i]);
}
以下是示例输入($data):
[10,2,123,4,34,6]
以及样本输出($output):
[[10,2],[123,4,],[34,6]]
但我得到(甚至不是空数组):
[,,] == [null,null,null]
$data[$i]是一个整数。我试图显式地调用intval(),但仍然没有成功。此外,*array_push()*在执行后不会返回任何内容。没有引发错误或警告。。
来自PHP文档(http://php.net/manual/en/function.array-push.php):
注意:如果第一个参数不是数组,array_push()将引发警告。这与创建新数组的$var[]行为不同。
调用推送时未初始化数组。
使用$output[$ind][] = $data[$i];
在开发时打开错误报告(我建议将其设置为E_ALL),您将看到所有问题。您正试图将值推送到不存在的数组中——您必须检查是否已经在要推送的索引处创建了数组,如果它不存在,则创建它。代码中的另一个问题是你做了太多的一个循环(应该是$i < $length
):
$output = Array();
$length = count($data);
for ($i = 0; $i < $length; $i++) {
$ind = $i - ($i % 2);
if (!isset($output[$ind])) $output[$ind] = array();
array_push($output[$ind], $data[$i]);
}
$output
阵列在使用array_push()
时未初始化,请尝试此
$data = array(10,2,123,4,34,6);
$output = Array();
$length = count($data);
for ($i = 0; $i < $length; $i++) {
$ind = $i - ($i % 2);
//array_push($output[$ind], $data[$i]);
$output[$ind] = $data[$i];
}
var_dump(array_values($output));
输出
array(3) {
[0] => int(2)
[1] => int(4)
[2] => int(6)
}
完成相同任务的更简单方法:
$output = array_chunk($data, 2);