【问题标题】:Severity: Warning Message: array_push() expects parameter 1 to be array, null given Filename: controllers/main.php Line Number: 676严重性:警告消息:array_push() 期望参数 1 为数组,给定 null 文件名:controllers/main.php 行号:676
【发布时间】:2015-06-17 06:11:01
【问题描述】:

当我运行这个函数时,我得到了

消息:array_push() 期望参数 1 为数组,在第 676 行给出 null 严重性:警告消息:array_push() 期望参数 1 为数组,给定 null 文件名:controllers/main.php 行号:676

function get_order_details()
{

  $query1="SELECT * FROM order_main ";
  $o_main=$this->main_model->query_return($query1); 

  $query="SELECT * FROM order_main om join order_details od on od.order_main_id=om.order_id ";
  $o_details=$this->main_model->query_return($query);   

  if(count($o_details))
  {

    $ary = array(
      'details'=> array(
        'orders'=>array()
      )
    );

    foreach($o_main as $om)
    {
      $jsonCustomer=array(
        $om->order_id=> array(
          array("order_id"=>$om->order_id,
            "customer_name"=>$om->customer_name,
            "contact_no"=>$om->contact_no,
            "address"=>$om->address,
            "landmark"=>$om->landmark,
            "items"=>array()
          )
        )
      );

      array_push($ary['details']['orders'],$jsonCustomer);
      foreach($o_details as $od)
      {
        $jsonRow=array(
          $od->dish_id=> array(
            "dish_id"=>$od->dish_id,
            "dishname"=>$od->dish_name,
            "qty"=>$od->qty,
            "category_id"=>$od->category_id,
            "category_name"=>$od->category_name,
            "price"=>$od->price,
          )
        );

        array_push($ary['details']['orders'][$om->order_id]   ['items'],$jsonRow);  

      }

    }

  echo $json=json_encode($ary);

  }

}

【问题讨论】:

  • 因为数组$ary['details']['orders']是空的
  • 谢谢,如何解决这个问题
  • $jsonCustomer 被初始化为 $om->order_id 的双数组而不是单个数组

标签: php json codeigniter


【解决方案1】:

我的猜测是这条线失败了:

array_push($ary['details']['orders'][$om->order_id] ['items'],$jsonRow);

看到您使用 $om->order_id 的双数组而不是单个数组初始化 $jsonCustomer。

其次,由于您将数组推入数组,因此会出现另一个双精度数组,而不是(您想要的)索引为$om->order_id

变化:

 $jsonCustomer=array(
    $om->order_id=> array(
      array("order_id"=>$om->order_id,
        "customer_name"=>$om->customer_name,
        "contact_no"=>$om->contact_no,
        "address"=>$om->address,
        "landmark"=>$om->landmark,
        "items"=>array()
      )
    )
  );

  array_push($ary['details']['orders'],$jsonCustomer);

进入

$jsonCustomer=array(
    "order_id"=>$om->order_id,
    "customer_name"=>$om->customer_name,
    "contact_no"=>$om->contact_no,
    "address"=>$om->address,
    "landmark"=>$om->landmark,
    "items"=>array()
);
$ary['details']['orders'][$om->order_id] = $jsonCustomer;

并且代码应该运行。

【讨论】:

  • 感谢您的回复,正如您所料,错误仅在这一行中 array_push($ary['details']['orders'][$om->order_id] ['items'] ,$jsonRow);但是我改成你的代码,还是一样的错误
  • 是的,它给出了一个错误,因为由于 jsonCustomer 的初始化,$ary['details']['orders'][$om->order_id] ['items'] 不存在。您将其定义为:$ary['details']['orders'][$om->order_id][0]['items']
  • 我也试过了,但没有用得到相同的错误消息:array_push() 期望参数 1 是数组,在行 array_push($ary['details']['orders'][ $om->order_id][0]['items'],$jsonRow);
  • 这两个更改都不会正常工作,只需更改 jsoncustomer 的初始化就足够了
  • 如何初始化jsoncustomer?
【解决方案2】:

检查 $ary['details']['orders'] 值的条件是否为空。

【讨论】:

  • 不,它不是空的,它在我打印“print_r($ary['details']['orders']);”时回显这些值
  • 你能发布 'print_r($ary['details']['orders'] );' 的示例输出吗?
【解决方案3】:

检查是否为空

if(!empty($ary['details']['orders'])){
  $order_details = $ary['details']['orders'];
}else{
  $order_details = 'any default value';
}

现在在这里或任何你想要的地方使用

 array_push($order_details,$jsonCustomer);

如果不使用empty(),你可以使用isset()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2018-06-05
    • 2014-06-28
    • 2013-09-26
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多