2017-01-17 1 views
1

Я не понимаю, почему foreach возвращает только первое значение из массива.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, но это только возврат сначала из массива.

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

+0

В каждом исполнении цикла 'foreach' вы переопределяете значение' $ List'. Вам нужно объявить '$ List' как массив и использовать' $ List [] = $ Arr; 'в вашем' foreach'. – roberto06

+1

Тем не менее, я не понимаю точку этой функции, которая преобразует массив в ... массив. – roberto06

+0

почему эта функция, вы можете использовать foreach напрямую –

ответ

4

магазин это в 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. 
} 

UPDATE: видя

Перед тем, как я использую как этот

часть из ваш вопрос, я предлагаю использовать вашу функцию __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 .... 
} 
+0

Я обновил свой вопрос с полным кодом, любезно проверяю, что это то, что я пытаюсь сделать. –

+0

@MuhammadHamzaNisar Я предлагаю не использовать эту функцию, вы можете напрямую использовать '$ Items' (это результирующий массив, как любой из вашей функции). Пусть ключ в переключателе будет динамическим. Вам не нужно «foreach» здесь. –

+0

это не работает, я сделал это. Поэтому я использую 'foreach', если вы удаляете foreach, это дает мне' error' 'undefined index, например rel, href' –

1

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

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.

1

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

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; 
} 

Вам необходимо собрать данные по каждому элементу в массиве.

 Смежные вопросы

  • Нет связанных вопросов^_^