0

我有一个数组输出。它里面应该有一组元组。我从 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

4 回答 4

2

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

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

调用推送时数组未初始化。

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

于 2013-08-01T23:09:40.883 回答
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]);
}
于 2013-08-01T23:13:39.063 回答
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)
}
于 2013-08-02T06:36:18.693 回答
1

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

$output = array_chunk($data, 2);
于 2013-08-02T08:38:05.433 回答