【问题标题】:Sorting array in 3 dim array in PHP [duplicate]在PHP中对3个暗淡数组中的数组进行排序[重复]
【发布时间】:2011-12-26 23:10:04
【问题描述】:

好的,我真的很难过,尝试了很多解决方案,但我无法让它发挥作用。现在放弃了几个小时,仍然没有。

我有一个如下所示的数组:$data['dietcontent'][1][1][1]

$data['dietcontent'][1][1][1]
--------------------^Day^Meal^Line

这个数组,我想整理出他们的 MealTime,它存在于$data['dietcontent'][1][1][1].MealTime

3d 数组的格式如下:

$data['dietcontent'][1][$mealNumber][$mealLine]['MealTime'].

$mealNumber 可以是 1 到 7, $mealLine 可以是 1 到 7

好的,这很难解释。结构可以做得更好,但由于我只是从中锻炼,我无能为力。

所以我不想解释,而是想给你一个例子,说明它现在的样子,以及我希望它是什么样子。

这是一个例子:

$data['dietcontent'][1][1][1]['MealTime'] // is 07:00
$data['dietcontent'][1][1][2]['MealTime'] // is 07:00
$data['dietcontent'][1][1][3]['MealTime'] // is 07:00
$data['dietcontent'][1][1][4]['MealTime'] // is 07:00
$data['dietcontent'][1][1][5]['MealTime'] // is 07:00
$data['dietcontent'][1][1][6]['MealTime'] // is 07:00
$data['dietcontent'][1][1][7]['MealTime'] // is 07:00
$data['dietcontent'][1][2][1]['MealTime'] // is 01:30
$data['dietcontent'][1][2][2]['MealTime'] // is 01:30
$data['dietcontent'][1][2][3]['MealTime'] // is 01:30
$data['dietcontent'][1][2][4]['MealTime'] // is 01:30
$data['dietcontent'][1][2][5]['MealTime'] // is 01:30
$data['dietcontent'][1][2][6]['MealTime'] // is 01:30
$data['dietcontent'][1][2][7]['MealTime'] // is 01:30

是它的样子。现在我想在 MealTime 之后对这个数组中的 $mealNumber(第二个 [])位置进行排序。所以它看起来像这样:

$data['dietcontent'][1][1][1]['MealTime'] // is 01:30
$data['dietcontent'][1][1][2]['MealTime'] // is 01:30
$data['dietcontent'][1][1][3]['MealTime'] // is 01:30
$data['dietcontent'][1][1][4]['MealTime'] // is 01:30
$data['dietcontent'][1][1][5]['MealTime'] // is 01:30
$data['dietcontent'][1][1][6]['MealTime'] // is 01:30
$data['dietcontent'][1][1][7]['MealTime'] // is 01:30
$data['dietcontent'][1][2][1]['MealTime'] // is 07:00
$data['dietcontent'][1][2][2]['MealTime'] // is 07:00
$data['dietcontent'][1][2][3]['MealTime'] // is 07:00
$data['dietcontent'][1][2][4]['MealTime'] // is 07:00
$data['dietcontent'][1][2][5]['MealTime'] // is 07:00
$data['dietcontent'][1][2][6]['MealTime'] // is 07:00
$data['dietcontent'][1][2][7]['MealTime'] // is 07:00

我该怎么做?!非常感谢您的帮助!

【问题讨论】:

  • @hakre 我无法为我解决这个问题!

标签: php multidimensional-array


【解决方案1】:
foreach($data['dietcontent'] as &$day){
    //create temp sorting array
    $mealsArr = array();
    foreach($day as $meal){
        $i = 1;
        foreach($meal as $line){
            //put the lines into the temp array using meal time as key
            $mealsArr[$line['MealTime']][$i] = $line;
            $i++;
        }
    }        
    //sort the array by key (meal time!)
    ksort($mealsArr);
    //set up the new meals in the same format as before
    $newMeals = array();
    $i = 1;
    foreach($mealsArr as $lines){
        $newMeals[$i] = $lines;
        $i++;
    }
    //put back the new lines
    $day = $newMeals;
}

编辑:设置错误的键

【讨论】:

  • 我怎样才能把它全部放回 $data['dietcontent'] ?我试过 $day[] = $newMeals 然后在 foreach $data['dietcontent'] = $day;但它不起作用。
  • 第 1 行的 &$day 通过引用传递。对 $day 的任何更改都将应用回原始数组 $data['dietcontent']。所以$day = $newMeals; 会改变原来的数组。你也可以foreach($data['dietcontent'] as $key=>$day){ 然后在最后一行$data['dietcontent'][$key] = $newMeals;
  • 谢谢。它开始工作。但不正确。当它排序时,例如 Meal 2,它有 7 行(数组中的第三个 [])。在我的示例数组中,其中 2 个已填充,我希望它们成为数组索引中的第一个(因此在这种情况下,我可以通过 [1]、[2] 到达它们),然后空的可以紧随其后,如果有的话。在使用您的代码进行排序之前,它们已经是这样了。因为现在它产生了 2 个空行,在一个被填充之前,然后是 1 个空行,然后是一个被填充的行,然后是另外 2 个空行。
  • 不确定您的意思,但是如果您只需要对数组的一部分进行排序,则必须将数组分开,然后对其中的一部分进行排序,然后将其重新加入。您必须发布更多示例以获得更多帮助
猜你喜欢
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 2011-12-02
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多