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