Array_Push показывает только последний объект, вставленный в него - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь поместить объекты в массив на основе ответа в случае переключения, но объект возвращает последний вставленный в него элемент вместо целых объектов.Это приложение BOT Facebook Messenger $user_ratings устанавливается каждый раз, когда пользователь отвечает на BOT.Вот мой код

$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), он возвращает только последний объект "Outlet Ratings".Пожалуйста, помогите взглянуть на код.Спасибо

Ответы [ 4 ]

0 голосов
/ 04 октября 2018

Почему вы используете array_push?Вы должны использовать:

 $ratings[] = $rates;

Кроме того, я заметил в вашем коде, что вы не инициализируете $ ставки, поэтому убедитесь, что он очищается каждый раз, когда вызывается этот фрагмент кода, чтобы вы не сталкивалисьперезапись проблем, которые могут быть вашей проблемой здесь.

0 голосов
/ 04 октября 2018

Если весь код вызывается в цикле или в sthg, вы всегда создаете новый массив с именем $ rating с помощью

$ratings=array();

, если последним «регистром» в вашем цикле является «outletRating», толькорезультат этого случая сохраняется в $ рейтингах.

, если у вас нет цикла вокруг этого, код будет вызываться только с первой итерацией / случаем, и поэтому будет заполняться только результатомпервого случая.

0 голосов
/ 04 октября 2018

Итак, вы пытаетесь извлечь некоторые данные в пустой массив, основанный на различных пользовательских вводах.Сначала вы пытаетесь поместить массив ставок (который не определен в этом коде, поэтому не знаете об этом полностью) в ваш пустой массив оценок.Я заметил, что вы не можете вставить массив в другой с помощью 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);

Попробуйте и расскажите, что происходит?Ваша проблема решена?

0 голосов
/ 04 октября 2018

У вас нет цикла здесь, вы просто переключаете регистр, и он возвращает результат в соответствии с этим оператором регистра переключателя, поэтому, если результат равен 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.

...