函数与调用之间的push_array

时间:2014-10-21 14:35:52

标签: php

在我宣布的文件顶部

$final = array();

然后我得到了以下功能

function delivery($optional = null){

   global $db;
   //$return = $_POST;
   if(!empty($optional['reportdate_from'])) {
    //$return1['from'] = $optional['reportdate_from'];
   }
   if(!empty($optional['reportdate_to'])) {
    //$return1['from'] = $optional['reportdate_from'];
   }
   $sth = $db->prepare("SELECT  DATE(date) Date, COUNT(number) totalCOunt FROM numbers GROUP BY  DATE(date)");
   $sth->execute();
   $result = $sth->fetchAll();
            $return1['name'] = 'W doręczeniu';
            foreach ($result as $row1) {
            $date1 =strtotime($row1['Date'])*1000;
            $return1['data'][] = array($date1, (int)$row1['totalCOunt']);
            }
return array_push($final,$return1);
// echo json_encode($final,true);

}
function delivered($optional){
   global $db;
   $return = $_POST;
   if(!empty($optional['reportdate_from'])) {
    //$return1['from'] = $optional['reportdate_from'];
   }
   if(!empty($optional['reportdate_to'])) {
    //$return1['to'] = $optional['reportdate_to'];
   }
   $sth = $db->prepare("SELECT  DATE(date) Date, COUNT(number) totalCOunt FROM numbers Where `return` = 1 AND rdate != '0000-00-00 00:00:00' GROUP BY  DATE(date)");
   $sth->execute();
   $result = $sth->fetchAll();

            $return1['name'] = 'Doręczone';
            foreach ($result as $row1) {
            $date1 =strtotime($row1['Date'])*1000;
            $return1['data'][] = array($date1, (int)$row1['totalCOunt']);
            }

return array_push($final,$return1);

}

在我得到的文件的最底部:

echo json_encode($final,true);

总输出为[]无属性 并且警告:array_push()期望参数1为数组,在

中给出null

所有数组都不为null,只有在array_push(ed)

时才会发生

调用函数。

 case "test": delivery($optional); break;
 case "test1": delivered($optional); break;

为什么会出现此错误?

2 个答案:

答案 0 :(得分:1)

你的函数里面没有global $final,所以你定义为数组的全局$ final在你的函数内超出范围/不可见/不存在。

return array_push($final,$return1);

这一行将创建一个 NEW 本地$ final,将$ return1加到其上,然后将该新数组返回给调用上下文。而且由于你不会在任何地方捕获返回值,因此数组只会被扔进垃圾箱。

如果你有这样的事情:

case "test":  array_push($final, delivery($optional)); break;

然后你的代码就可以了

答案 1 :(得分:0)

你在函数中添加$ final,但与javascript不同,php不知道全局变量,除非你"包含"它们在您的函数中使用关键字global或将它们作为参数传递(我更喜欢)