2011-12-26 42 views
0

好的,即时通讯有一段非常困难的时间,并且尝试了很多解决方案,但是我无法将其运行。现在放弃了几个小时,但仍然一无所获。在PHP中使用3个暗淡阵列对数组进行排序

我有一个数组,看起来像这样:$data['dietcontent'][1][1][1]

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

这阵,我想理清自己的进餐时间,即在$data['dietcontent'][1][1][1].MealTime

三维阵列是这种格式的存在:

$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 

我该怎么做?!你的帮助真的很感谢!

+0

@hakre我不能让对这个问题进行解决方案为我工作! – Karem 2011-12-27 01:16:29

回答

0
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; 
} 

编辑:设置错了键

+0

我怎么把它全部回到$ data ['dietcontent']?我尝试了$ day [] = $ newMeals,然后在foreach之外$ data ['dietcontent'] = $ day;但它不起作用。 – Karem 2011-12-27 01:15:34

+0

第1行的'&$ day'通过引用传递。对$ day的任何更改都将应用回原始数组$ data ['dietcontent']。所以'$ day = $ newMeals;'会改变原始数组。你也可以做foreach($ data ['dietcontent']为$ key => $ day){'然后在最后一行'$ data ['dietcontent'] [$ key] = $ newMeals;' – Savid 2011-12-27 01:27:29

+0

谢谢。它开始工作。但不正确。当它排序时,例如Meal 2,它有7行(数组中的第三个[]]。在我的示例数组中,其中2个被填充,我希望它们是数组索引中的第一个(所以在这种情况下,我可以通过[1],[2]找到它们),然后可以找到空的部分,如果有的话。他们就像这样在你的代码排序之前。因为现在它会先填充2条空行,然后是1条空行,然后是1条空行,然后是2条空行。 – Karem 2011-12-27 01:36:06