首页 > 解决方案 > 在 php laravel/api 中合并两个 foreach

问题描述

再会!我成功地找到了缩短我的代码的答案。有人说我可以合并 foreach 语句使其变得更短。但我到处搜索,但似乎找不到任何具有类似代码的解决方案。我只想知道如何合并这两个 foreach。

这是我的代码:

    $newArray = [];
    $keys = ['name', 'sex', 'age', 'height', 'weight'];
    foreach(explode(PHP_EOL, Storage::get('upload/test.txt')) as $key => $line) {
        $finalArray = [];
        foreach( explode(',', $line) as $i => $value){
            $finalArray[ $keys [ $i ] ] = $value;       
        }
        array_push($newArray, $finalArray); 
    }
    die(json_encode($newArray));

这是另一个与第一个代码具有相同输出的代码:

        $newArray = array();
        foreach(explode(PHP_EOL, Storage::get('upload/test.txt')) as $key => $line) {
            array_push($newArray, explode(',', $line)); 
        }
        $finalArray = array();
        foreach($newArray as $key) {
                $key = [
                            "name" => $key[0],
                            "sex" => $key[1],
                            "age" => $key[2],
                            "height" => $key[3],
                            "weight" => $key[4],
                        ];
                        array_push($finalArray, $key); 
        }
        die(json_encode($finalArray));

标签: phplaravelapi

解决方案


您可以使用array_combine使其更简单:

$newArray = [];
$keys = ['name', 'sex', 'age', 'height', 'weight'];
foreach (explode(PHP_EOL, Storage::get('upload/test.txt')) as $line) {
    $newArray[] = array_combine($keys, explode(',', $line));
}

或者您可以使用array_map()并执行以下操作:

$keys = ['name', 'sex', 'age', 'height', 'weight'];

$newArray = array_map(function ($line) use ($keys) {
    return array_combine($keys, explode(',', $line));
}, explode(PHP_EOL, Storage::get('upload/test.txt')));

推荐阅读