【问题标题】:Strange Behaviour of array_push() in php [closed]php中array_push()的奇怪行为[关闭]
【发布时间】:2012-11-19 13:30:16
【问题描述】:

我在php的array_push函数中遇到了一个奇怪的问题。

让我们看看我的代码:

$sets_collection=array();
foreach($result['ques'] as $val){
      $sets_collection=array_push($sets_collection,$val['set']);
      }

比它给我的错误: 消息:array_push() 期望参数 1 是数组,给定整数

但是当我这样做时,它工作正常:

$sets_collection=array();
      $i=0;
        foreach($result['ques'] as $val)
        {
        $sets_collection[$i]=$val['set']; 
        $i++;
        }

我的问题是为什么会发生这种情况,是否必须有一个数组的索引才能执行推送操作?因为在我的第一种情况下,数组 $set_collection 没有任何索引,请告诉我为什么会这样??

【问题讨论】:

  • RTFM for array_push,查看其返回值并阅读示例。
  • 语法错误! $sets_collection[]=$val['set']array_push($sets_collection,$val['set']) 相同,并且 array_push 返回新的数组计数。第一次迭代后,您将看到案例 1 中的错误。

标签: php arrays


【解决方案1】:

试试这个

$sets_collection=array();

foreach($result['ques'] as $val){
    array_push($sets_collection,$val['set']); 
}

【讨论】:

  • 我在第一种情况下尝试了同样的方法,这给了我错误。
  • 不,我现在弄错了,这工作正常...谢谢:(
【解决方案2】:

这是因为array_push() 返回数组中的新元素数量。您不会将返回的值分配给数组变量。第一个参数实际上是通过引用传递的。因此,它的值会被函数改变。

【讨论】:

    【解决方案3】:

    这是因为array_push 返回数组中的新元素数量,当您在第一次迭代中推送数组时它可以工作,但在第二次迭代中$sets_collection becomes 1 这是一个integer,因此函数失败并出现上述错误。

    参考:array_push()

    【讨论】:

      【解决方案4】:

      array_push 不返回数组 - 只是一个整数。可能由于array_push的预期返回,变量sets_collection被假定为整数,所以后面的参数也被视为整数。

      只需删除分配,它应该可以正常工作。

      array_push($sets_collection,$val['set']);
      

      【讨论】:

        猜你喜欢
        • 2016-02-16
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多