2011-12-26 39 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