Как решить сброс переменных в вложенном цикле foreach в php - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть строка, которую я преобразовал в массивы, но хотел бы отобразить ее в списке.Как мне сбросить цикл, чтобы избежать повторения?

Я попытался установить переменную как пустую, используя которую обычно работает для одного оператора foreach

$SEAT = "1A,4A";
$NAME = "John Doe, Jane Doe";
$PHONE_NUMBER = "123456856,1235668";


$SEAT_USSD_STRING_VALUE = explode(",", $SEAT);
$NAME_USSD_STRING_VALUE = explode(",", $NAME);
$PHONE_USSD_STRING_VALUE = explode(",", $PHONE_NUMBER);

$seat_value = "";
foreach ($SEAT_USSD_STRING_VALUE as $seat_key => $seat_value) {
    $name_value = "";
    foreach ($NAME_USSD_STRING_VALUE as $name_key => $name_value) {
        $phone_number_value = "";
        foreach ($PHONE_USSD_STRING_VALUE as $phone_number_key => $phone_number_value) {
            echo "$seat_value: $name_value - $phone_number_value<br/>";
        }
    }
}

Я ожидаю получить

1A: John Doe - 12345678
4A: Jane Doe - 87654321

Но я получаю это

1A: John Doe - 12345678
1A: John Doe - 87654321
1A: Jane Doe - 12345678
1A: Jane Doe - 87654321
4A: John Doe - 12345678
4A: John Doe - 87654321
4A: Jane Doe - 12345678
4A: Jane Doe - 87654321

Ответы [ 3 ]

3 голосов
/ 21 апреля 2019

Вы можете сделать это, предполагая, что у вас всегда есть одинаковое количество элементов в ваших 3 массивах:

<?php

$SEAT = "1A,4A";
$NAME = "John Doe, Jane Doe";
$PHONE_NUMBER = "123456856,1235668";

$SEAT_USSD_STRING_VALUE = explode(",", $SEAT);
$NAME_USSD_STRING_VALUE = explode(",", $NAME);
$PHONE_USSD_STRING_VALUE = explode(",", $PHONE_NUMBER);

$seat_value = "";
foreach ($SEAT_USSD_STRING_VALUE as $seat_index => $seat_value) {
    $name_value = $NAME_USSD_STRING_VALUE[$seat_index];
    $phone_value = $PHONE_USSD_STRING_VALUE[$seat_index];
    echo "$seat_value: $name_value - $phone_value<br/>";
}

В этом случае вы всегда можете обратиться к элементу, находящемуся с таким же индексом в других массивах.

Это будет работать следующим образом: мы находимся с индексом 0 в цикле массива сиденья, а затем имя будет 0 индексным элементом массива имен, а телефон будет 0 индексным элементом массива телефона.

0 голосов
/ 21 апреля 2019

Вы можете использовать array_merge, explode и array_walk, чтобы получить желаемый результат

$arr = array_merge(
    explode(',',$SEAT),
    explode(',',$NAME),
    explode(',',$PHONE_NUMBER)
);
$res = [];
array_walk($arr, function($v, $k) use (&$res){
 if($k % 2 == 0) //even
    $res['event'][] = ($k == 0) ? ($v.' : ') : ($k > 0 && $k < 4 ? $v.' - ' : $v);
else
    $res['odd'][]  =   ($k == 1) ? ($v.' : ') : ($k > 0 && $k < 4 ? $v.' - ' : 
$v);
 });
echo implode('',$res['event']).'<br/>';
echo implode('',$res['odd']).'<br/>';
0 голосов
/ 21 апреля 2019

Вам просто нужно использовать ключ ($seat_key), который доступен в вашем первом foreach

, использовать этот foreach вместо всех вас foreach

foreach ($SEAT_USSD_STRING_VALUE as $seat_key => $seat_value) {
        echo "$seat_value: $NAME_USSD_STRING_VALUE[$seat_key] - $PHONE_USSD_STRING_VALUE[$seat_key]<br/>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...