Array_Push仅显示最后一个推入其中的对象

时间:2018-10-04 08:18:17

标签: php arrays array-push

我试图根据切换情况下的响应将对象推入数组,但是对象返回最后推入其中的项目,而不是整个对象。每次用户回复BOT时都会设置一个Facebook Messenger BOT应用程序$user_ratings。这是我的代码

$ratings=array();
$user_ratings=$msg['message']['quick_reply']['payload'];

switch($user_ratings)
{
    case "servicerate":
        $rates['Name']='Our Service';
        $rates['Rating']=$msg['message']['text'];
        array_push($ratings,$rates);
        $facebook->sendAction($sender);
        sleep(2);
        $facebook->recommend($sender);
        break;
    case "recommend":
        $rates['Name']='Recommend';
        $rates['Rating']=$msg['message']['text'];
        array_push($ratings,$rates);
        $facebook->sendAction($sender);
        sleep(2);
        $facebook->storeRating($sender);
        break;
    case "storeRating":
        $rates['Name']='Store Ratings';
        $rates['Rating']=$msg['message']['text'];
        array_push($ratings,$rates);
        $facebook->sendAction($sender);
        sleep(2);
        $facebook->outletRating($sender);
        break;
    case "outletRating":
        $rates['Name']='Outlet Ratings';
        $rates['Rating']=$msg['message']['text'];
        array_push($ratings,$rates);
        $facebook->sendAction($sender);
        sleep(2);
        break;
}

但是,如果我执行print_r($ratings),则它仅返回最后一个对象“插座额定值”。请帮助看看代码。 谢谢

4 个答案:

答案 0 :(得分:0)

您在这里没有循环,您只有开关用例,它根据该开关用例语句返回结果,因此如果结果为Outlet Ratings 这意味着$user_ratings=$msg['message']['quick_reply']['payload'];的值为"outletRating",因此将执行以下代码:

$rates['Name']='Outlet Ratings';
$rates['Rating']=$msg['message']['text'];
array_push($ratings,$rates);
$facebook->sendAction($sender);
sleep(2);

$rates的值推入$ratings数组中。

答案 1 :(得分:0)

如果整个代码是在循环或sthg中调用的,则始终创建一个名为$ ratings的新数组

$ratings=array();

如果循环中的最后一个'case'是'outletRating',则仅此案例的结果存储在$ ratings中。

如果您对此没有循环,则只会在您具有第一个迭代/大小写的情况下调用代码,因此只会填充第一个case的结果。

答案 2 :(得分:0)

因此,您尝试根据不同的用户输入将一些数据提取到一个空数组中。首先,您要尝试将rates数组(此代码中未定义,因此不完全了解)放入空的rating数组中。我注意到的是,您不能使用array_push()将一个数组推入另一个数组。您应该尝试像这样使用array_merge():

$a = array('a', 'b');
$b = array('c', 'd');
$merge = array_merge($a, $b); 
// $merge is now equals to array('a','b','c','d');

您的情况应该是:

$rates['Name']='Our Service';
$rates['Rating']=$msg['message']['text'];
array_merge($ratings,$rates);

尝试一下,告诉会发生什么?您的问题解决了吗?

答案 3 :(得分:0)

为什么要使用array_push? 您应该使用:

 $ratings[] = $rates;

此外,我在您的代码中注意到您没有重新初始化$ rates,因此请确保每次调用这段代码时都将其清空,这样您就不会面临覆盖问题,而这可能是您在这里遇到的问题。 / p>