Php 从数组中提取

Php 从数组中提取,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下数组: $dish = [ 'fr' => [ ['lunch','starter','dish name fr 1','dish info 1','price 1'], ['lunch','starter','dish name fr 2','dish info 2','price 2'], ['both','starter','dish name fr 3','dish info 3','price

我有以下数组:

$dish = [
    'fr' => [
            ['lunch','starter','dish name fr 1','dish info 1','price 1'],
            ['lunch','starter','dish name fr 2','dish info 2','price 2'],
            ['both','starter','dish name fr 3','dish info 3','price 3'],
            ['both','main','dish name fr 4','dish info 4','price 4'],
            ['both','main','dish name fr 5','dish info 5','price 5'],
            ['both','main','dish name fr 6','dish info 6','price 6'],
            ['both','dessert','dish name fr 7','dish info 7','price 7'],
            ['diner','dessert','dish name fr 8','dish info 8','price 8'],
            ],
    'nl' => [
            ['lunch','starter','dish name nl 1','dish info 1','price 1'],
            ['lunch','starter','dish name nl 2','dish info 2','price 2'],
            ['both','starter','dish name nl 3','dish info 3','price 3'],
            ['both','main','dish name nl 4','dish info 4','price 4'],
            ['both','main','dish name nl 5','dish info 5','price 5'],
            ['both','main','dish name nl 6','dish info 6','price 6'],
            ['both','dessert','dish name nl 7','dish info 7','price 7'],
            ['diner','dessert','dish name nl 8','dish info 8','price 8'],
            ],
    'en' => [
            ['lunch','starter','dish name en 1','dish info 1','price 1'],
            ['lunch','starter','dish name en 2','dish info 2','price 2'],
            ['both','starter','dish name en 3','dish info 3','price 3'],
            ['both','main','dish name en 4','dish info 4','price 4'],
            ['both','main','dish name en 5','dish info 5','price 5'],
            ['both','main','dish name en 6','dish info 6','price 6'],
            ['both','dessert','dish name en 7','dish info 7','price 7'],
            ['diner','dessert','dish name en 8','dish info 8','price 8'],
            ],
];

我设法通过语言获得了:

菜名fr 1

菜名fr 2

菜名fr 3

菜名nl 1

菜名NL2

菜名NL3

菜名EN1

菜名EN2

菜名EN3

但我也希望通过菜肴展示:

起动机

菜名fr 1

菜名nl 1

菜名EN1

菜名fr 2

菜名NL2

菜名EN2

菜名fr 3

菜名NL3

菜名EN3

Main

菜名fr 4

菜名NL4

菜名EN4

菜名fr 5

菜名nl 5

菜名EN5

菜名fr 3

菜名NL3

菜名EN3

你会怎么做


谢谢

我会正确地将其重建到另一个阵列中,如下所示:

$newArr = array();

$i = 0;
foreach($dish AS $langString => $lang){
    foreach($lang AS $key => $subdish){
        $newArr[$subdish[1]][$i]['dish'] = $subdish[2];
        $newArr[$subdish[1]][$i]['sort'] = $key;
        $i++;
    }
}

function sortByOrder($a, $b) {
    return $a['sort'] - $b['sort'];
}

usort($newArr['starter'], 'sortByOrder');
usort($newArr['main'], 'sortByOrder');
usort($newArr['dessert'], 'sortByOrder');

foreach($newArr as $course => $food){

    echo '<h2>' . $course .'</h2>';
    foreach($food as $plate){
        echo $plate['dish'] . '<br />';
    }
}
$newArr=array();
$i=0;
foreach($langString=>$lang){
foreach($langas$key=>$subdish){
$newArr[$subdish[1][$i]['dish']=$subdish[2];
$newArr[$subdish[1][$i]['sort']=$key;
$i++;
}
}
功能排序器($a,$b){
返回$a['sort']-$b['sort'];
}
usort($newArr['starter'],'sortByOrder');
usort($newArr['main'],'sortByOrder');
usort($newArr[‘甜点’,‘sortByOrder’);
foreach($newArr作为$course=>$food){
回音“.$course.”;
foreach($food as$plate){
回声$plate['dish']。
; } }
请记住,它可以正确地做得更聪明、更高效,这仅仅是为了给你一个“如何实现这样的目标的想法”

此外,您还必须找到一种方法来对新阵列中的菜肴进行排序,以便按照您希望的方式进行排序

更新


添加了排序功能,是的,对于一些简单的东西,有很多代码,但这是我当时可以用可用的数据结构编写的。

好的,这取决于您是否可以更改输入数组的格式。如果可以的话,我建议你做得更灵活一些——不必把所有的菜都混在一起,你就可以从中得到你需要的任何东西。所以,我会改变传入数组的结构。如果格式相同,你可以考虑使用<代码> ARAYY-CARILN()/<代码>。这将有助于你跳过循环,如果你能很好地使用它。谢谢你的帮助!它按类型(开胃菜、主菜和甜点)为我提供菜肴,我如何按语言对它们进行排序:dish 1 fr dish 1 nl dish 1 en dish 2 fr…@Viny先生查看我的更新答案,它现在根据您的需要进行排序,复制整个代码,因为有一些根本性的更改。如果我的答案对你合适,请记住接受:)
$newArr = array();

$i = 0;
foreach($dish AS $langString => $lang){
    foreach($lang AS $key => $subdish){
        $newArr[$subdish[1]][$i]['dish'] = $subdish[2];
        $newArr[$subdish[1]][$i]['sort'] = $key;
        $i++;
    }
}

function sortByOrder($a, $b) {
    return $a['sort'] - $b['sort'];
}

usort($newArr['starter'], 'sortByOrder');
usort($newArr['main'], 'sortByOrder');
usort($newArr['dessert'], 'sortByOrder');

foreach($newArr as $course => $food){

    echo '<h2>' . $course .'</h2>';
    foreach($food as $plate){
        echo $plate['dish'] . '<br />';
    }
}