Foreach只从数组

时间:2017-01-17 11:04:55

标签: php 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,但它只返回首先来自阵列。

必须返回完整数组。

3 个答案:

答案 0 :(得分: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.
}

更新:看到

  

在我使用之前

部分来自您的问题,我建议使用您的函数__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 ....
}

答案 1 :(得分: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建议的数组中存储。

答案 2 :(得分: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;
}

您需要捕获数组中的foreach数据。