Foreach возвращает только первое значение из массива

63
4

Я не понимаю, почему foreach возвращает только первое значение из массива.

function __EachReturn($Array){
foreach($Array as $Key=>$Arr){
$List = $Arr;
}
return $List;
}

Это моя полная функция:

// Styled Function
function Returnstyled($Style){
$Styled = array();
function __EachReturn($Array){
foreach($Array as $Key=>$Arr){
$List = $Arr;
}
return $List;
}

foreach($Style as $Key=>$Items){
$Items = __EachReturn($Items);
switch($Key){
case 'CSS':
$Styled[] = sprintf('<link rel="%s" href="%s" type="%s">',$Items['rel'],$Items['href'],$Items['type']);
break;
case 'JS':
$Styled[] = sprintf('<script src="%s" integrity="%s" crossorigin="%s"></script>',$Items['src'],$Items['integrity'],$Items['crossorigin']);
break;
}
}
return $Styled;
}

Прежде чем я буду использовать вот так:

function Returnstyled($Style){
$Styled = array();
foreach($Style as $Key=>$Items){
switch($Key){
case 'CSS':
foreach($Items as $Item){
$Styled[] = sprintf('<link rel="%s" href="%s" type="%s">',$Item['rel'],$Item['href'],$Item['type']);
}
break;
case 'JS':
foreach($Items as $Item){
$Styled[] = sprintf('<script src="%s" integrity="%s" crossorigin="%s"></script>',$Item['src'],$Item['integrity'],$Item['crossorigin']);
}
break;
}
}
return $Styled;
}

Так что я сделал. Я не хочу использовать foreach внутри switch case couple of time, поэтому я пытаюсь создать вложенную функцию. Я создаю внутри нее еще одну функцию EeachReturn но она возвращает только из массива.

Он должен быть возвращенным полным массивом.

спросил(а) 2021-01-27T17:10:19+03:00 5 месяцев, 4 недели назад
1
Решение
100

сохраните его в array и верните массив в конец:

function __EachReturn($Array){
$List=array();
foreach($Array as $Key=>$Arr){
$List[] = $Arr;//change is made here use array to store all values
}
return $List;//return the array.
}

ОБНОВЛЕНИЕ: видя

Прежде чем я использую это

часть из вашего вопроса, я предлагаю использовать вашу функцию __EachReturn следующим образом:

function __EachReturn($Key,$Array){
$Styled=array();
foreach($Array as $key=>$Items){
switch($Key){
case 'CSS':
$Styled[] = sprintf('<link rel="%s" href="%s" type="%s">',$Items['rel'],$Items['href'],$Items['type']);
break;
case 'JS':
$Styled[] = sprintf('<script src="%s" integrity="%s" crossorigin="%s"></script>',$Items['src'],$Items['integrity'],$Items['crossorigin']);
break;
}
}
return $Styled;
}
$ItemsList=array();
foreach($Style as $Key=>$Items){
$ItemsList[] = __EachReturn($Key,$Items);//$ItemsList will consist all the script/link ....
}

ответил(а) 2021-01-27T17:10:19+03:00 5 месяцев, 4 недели назад
63

Он не возвращает первое значение из массива, оно возвращает последнее значение.

function __EachReturn($Array){
foreach($Array as $Key=>$Arr){
$List = $Arr; //here $List is always getting overwritten by $Arr
}
return $List; //when loop finishes, final $Arr is in $List and it is returned
}

Чтобы все возвращаемые значения сохранялись в массиве, как предлагает @Suchit.

ответил(а) 2021-01-27T17:10:19+03:00 5 месяцев, 4 недели назад
64

Попробуй это,

function __EachReturn($Array){
$List = [];
foreach($Array as $Key=>$Arr){
$List[] = $Arr; // your loop record was replacing in every loop. now will be captured in array.
}
return $List;
}

Вам нужно захватить данные foreach в массиве.

ответил(а) 2021-01-27T17:10:19+03:00 5 месяцев, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема