首页 > 解决方案 > 使用嵌套的 foreach 从多个数组构建一个新数组

问题描述

我对如何从这 3 个数组创建一个新数组然后将新数组中的值传递给函数以将值插入数据库感到困惑和困惑。

3个数组:

flavourname Array ( 
    [0] => Red Sour Cherry Extract 
    [1] => Red Energy (Red Bull) 
)
flavourcompanyname Array ( 
    [0] => Amoretti 
    [1] => Bolsjehuset 
)
flavourpercent Array ( 
    [0] => 5 
    [1] => 2 
)

预期结果:

Array ( 
    [0] => Array ( 
        [flavourname] => Red Sour Cherry Extract 
        [flavourpercent] => 5 
        [flavourcompany] => Amoretti  
    ) 
    [1] => Array ( 
        [flavourname] => Red Energy (Red Bull) 
        [flavourpercent] => 2 
        [flavourcompany] => Bolsjehuset 
    )
)

我试过的代码是最接近的:

foreach($flavourname as $key => $value) {

    foreach($flavourpercent as $key2 => $value2) {

        foreach($flavourcompanyname as $key3 => $value3) {
            $newarray[] = array(
                'flavourname' => $value, 
                'flavourpercent' => $value2,
                'flavourcompany' => $value3
            );
        }
    }
}


print_r($newarray);

来自 print_r() 的输出:

Array ( 
    [0] => Array ( 
        [flavourname] => Red Sour Cherry Extract 
        [flavourpercent] => 5 
        [flavourcompany] => Amoretti
    )
    [1] => Array ( 
        [flavourname] => Red Sour Cherry Extract 
        [flavourpercent] => 5 
        [flavourcompany] => Bolsjehuset 
    )
    [2] => Array ( 
        [flavourname] => Red Sour Cherry Extract 
        [flavourpercent] => 2 
        [flavourcompany] => Amoretti 
    )
    [3] => Array ( 
        [flavourname] => Red Sour Cherry Extract 
        [flavourpercent] => 2 
        [flavourcompany] => Bolsjehuset 
    )
    [4] => Array (
        [flavourname] => Red Energy (Red Bull) 
        [flavourpercent] => 5 
        [flavourcompany] => Amoretti
    )
    [5] => Array (
        [flavourname] => Red Energy (Red Bull)
        [flavourpercent] => 5
        [flavourcompany] => Bolsjehuset
    )
    [6] => Array (
        [flavourname] => Red Energy (Red Bull)
        [flavourpercent] => 2
        [flavourcompany] => Amoretti
    )
    [7] => Array (
        [flavourname] => Red Energy (Red Bull)
        [flavourpercent] => 2
        [flavourcompany] => Bolsjehuset
    )
) 

如您所见,上面的数组根本不是我想要的。

然后我想将新数组的值传递给这个函数以插入数据库:

foreach($newarray as $new) {
    $this->addRecipeFlavours($lastID, trim($new['flavourname']), trim($new['flavourcompany']), $new['flavourpercent'], $usereid);
}

功能:

/**
    ADD FLAVOURS
*/

public function addRecipeFlavours($recipeID, $recipeFlavourName, $recipeFlavourCompanyName, $recipePercent, $usereid) {
    $query = 'INSERT INTO recipe_flavours (recipe_flavour_name, recipe_flavour_company_name, recipe_flavour_percent, recipe_flavour_recipe_id, recipe_flavour_ueid) VALUES (:recipeflavourname, :recipeflavourcompanyname, :recipeflavourpercent, :recipeflavourid, :usereid)'; 
    $stmt = $this->queryIt($query);
    $stmt = $this->bind(':recipeflavourname',$recipeFlavourName);
    $stmt = $this->bind(':recipeflavourcompanyname',$recipeFlavourCompanyName);
    $stmt = $this->bind(':recipeflavourpercent',$recipePercent);
    $stmt = $this->bind(':recipeflavourid',$recipeID);
    $stmt = $this->bind(':usereid',$usereid);
    if($this->execute()) {

    }
}

标签: phparrays

解决方案


您可以使用array_map遍历数组。

$flavourname = //Your array
$flavourcompanyname = //Your array
$flavourpercent = //Your array

$result = array_map(function($a, $b, $c){
    return array(
        'flavourname' => $a,
        'flavourcompany' => $b,
        'flavourpercent' => $c,
    );
}, $flavourname, $flavourcompanyname, $flavourpercent);

echo "<pre>";
print_r( $result );
echo "</pre>";

这将导致:

Array
(
    [0] => Array
        (
            [flavourname] => Red Sour Cherry Extract
            [flavourcompany] => Amoretti
            [flavourpercent] => 5
        )

    [1] => Array
        (
            [flavourname] => Red Energy (Red Bull)
            [flavourcompany] => Bolsjehuset
            [flavourpercent] => 2
        )

)

文档:array_map()


推荐阅读