PHP array_push添加null而不是整数

时间:2013-08-01 23:06:26

标签: php arrays array-push

我有一个数组输出。它应该有一组元组。我在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()*在执行后不返回任何内容。没有错误或警告抛出..

4 个答案:

答案 0 :(得分:2)

来自PHP文档(http://php.net/manual/en/function.array-push.php):

  

注意:如果第一个参数不是数组,array_push()将发出警告。这与创建新数组的$ var []行为不同。

调用push时,数组未初始化。

使用$output[$ind][] = $data[$i];

答案 1 :(得分:1)

开发时打开错误报告(我建议将其设置为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]);
}

答案 2 :(得分:1)

使用$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)
}

答案 3 :(得分:1)

完成同样事情的更简单方法:

$output = array_chunk($data, 2);