foreach возвращает только последний элемент, как получить все элементы - PullRequest
1 голос
/ 25 февраля 2020

У меня есть этот код:

if(is_array($body)){
        foreach ($body as $key => $member) {
            $contacts = $member->id;
            print_r($contacts);
        }
        return $contacts;
    }

, и print_r печатает эти значения:

 366 367 368 369 370 371 372 373 374

, но возвращает только значение 374, почему? Я хочу сначала вернуть 366, потом 367, потом 368 .... и так далее. чего мне не хватает?

Ответы [ 6 ]

1 голос
/ 25 февраля 2020

Если вам нужен только один столбец из данных (и при условии использования PHP 7+), вы можете использовать array_column() для извлечения данных без использования al oop ...

$contacts = array_column($member, 'id');
0 голосов
/ 25 февраля 2020

Вы должны создать переменную с пустым массивом (например, $memberIds), а затем в foreach l oop добавить значение зацикленного члена / контакта в массив. В вашем случае - вы не добавляете идентификаторы в переменную $contacts, но по-прежнему изменяете исходное значение.

Так что лучшее решение для вас может выглядеть следующим образом:

if(is_array($body)){
    $contacts = []; // defining empty array
    foreach ($body as $key => $member) {
        $contacts[] = $member->id; // appending member's id to the array of contacts
    }
    print_r($contacts); // Now you can print all ID's
}

Позвольте мне знать в случае каких-либо дополнительных вопросов:)

0 голосов
/ 25 февраля 2020

Сначала позвольте мне объяснить ваш код. Вы хотите отобразить массив идентификатора члена. поэтому в вашем коде вы должны объявить массив $ contract и pu sh $member->id для него на l oop. но в вашем коде вы не только pu sh, вы просто переназначаете $member->id каждый раз для l oop, поэтому он будет показывать только последний $member->id.

, ваш код должен измениться ниже .

if(is_array($body)){
    // declared $contacts as array
    $contacts = []; 

    foreach ($body as $key => $member) {
        // push memberId to contracts array
        $contacts[] = $member->id;
    }

    print_r($contacts);
}
0 голосов
/ 25 февраля 2020

Ваш код должен быть:

 $contacts = array();
    if(is_array($body)){

            foreach ($body as $key => $member) {
                $contacts[] = $member->id;
                //print_r($contacts);
            }
          //return $contacts;
        }
    print_r($contacts);

Нет необходимости использовать return, если функции нет.

0 голосов
/ 25 февраля 2020

В l oop вы печатаете каждое число.

Но в $contacts всегда только последний номер. $contacts не является массивом.

Попробуйте $contacts[] = $member->id;

0 голосов
/ 25 февраля 2020
if(is_array($body)){
    $contacts = array();
    foreach ($body as $key => $member) {
      $contacts[] = $member->id;        
    }   
    return $contacts;
}

если вы вернете только $contacts, он получит только одно значение.

...