2013-02-13 102 views
0

您好,我需要一些使用explode和array_combine形成陣列的幫助。使用PHP array_combine&爆炸與多維數組

我想結合使用爆炸的結果下面的兩個數組(qty和fooddesc)。我試圖使數組數組的關鍵和fooddesc數組使用數組結合的值,但無法獲得正確的語法,所以我中止了。

我似乎無法弄清楚如何做到這一點。可能我只需要改變查詢數據的方式,所以我根本不需要使用爆炸?這讓我瘋狂。

我正在組成數組來包含n餐包含食物數量和它們的描述的膳食計劃,以便我可以很容易地將數據從數組中排除到我的html中。

這裏是我的代碼和陣列輸出:

// Begin Meal Plan 
$sql = "SELECT notes, mealdesc, optdesc, group_concat(qty) as qty, group_concat(fooddesc SEPARATOR ',') as fooddesc 
    FROM plan p 
    INNER JOIN mealplan mp 
    ON mp.planid = p.id 
    INNER JOIN meal m 
    ON m.id = mp.mealid 
    INNER JOIN foodmeal fm 
    ON fm.mealid = m.id 
    INNER JOIN food f 
    ON f.id = fm.foodid 
    where userid = 2 
    GROUP by mealdesc 
    order by mealdesc"; 

$result = mysqli_query($link, $sql); 
if (!$result) 
{ 
    echo 'Error'; 
    exit(); 
} 

// Fetch meal data 
while($row = mysqli_fetch_array($result)){ 
$meals[$row['mealdesc']] = array('optdesc' => $row['optdesc'], 'qty' => explode(",",  $row['qty']), 'fooddesc' => explode(",", $row['fooddesc'])); 
$notes = $row['notes']; 
} 
// End Meal Plan 

這裏是陣列,它產生:(我修剪這表明僅僅是第一餐儘量簡短)

Array 
(
    [Meal 1] => Array 
     (
      [optdesc] => upon awakening 
      [qty] => Array 
       (
        [0] => 1 
        [1] => 6 
        [2] => 1/2 cup 
        [3] => 2 slices 
        [4] => 1 piece 
        [5] => 1 cup 
       ) 

      [fooddesc] => Array 
       (
        [0] => egg 
        [1] => egg whites 
        [2] => oatmeal 
        [3] => wheat toast 
        [4] => fruit 
        [5] => berries 
       ) 

     ) 

編輯 再次嘗試array_combine並使用count和for循環來組合qty和food desc,然後使用unset刪除舊的qty/fooddesc數組。

我不知道這是否是最好的解決方案,但它的工作原理。 :)認爲我只是回答了我自己的問題。

// Fetch meal data 
while($row = mysqli_fetch_array($result)){ 
$meals[$row['mealdesc']] = array('optdesc' => $row['optdesc'], 'qty' => explode(",",  $row['qty']), 'fooddesc' => explode(",", $row['fooddesc'])); 
$notes = $row['notes']; 
} 

$j = count($meals); 
for($i = 1; $i <= $j ; $i++) 
{ 
$meals['Meal '.$i][food] = array_combine($meals['Meal '.$i]['qty'], $meals['Meal '.$i]['fooddesc']); 
unset($meals['Meal '.$i]['qty']); 
unset($meals['Meal '.$i]['fooddesc']); 
} 
// End Meal Plan 

這給了我:

Array 
(
    [Meal 1] => Array 
     (
      [optdesc] => upon awakening 
      [food] => Array 
       (
        [1] => egg 
        [6] => egg whites 
        [1/2 cup] => oatmeal 
        [2 slices] => wheat toast 
        [1 piece] => fruit 
        [1 cup] => berries 
       ) 

     ) 

    [Meal 2] => Array 
     (
      [optdesc] => 3 hours later 
      [food] => 
     ) 

回答

0
array_combine(
array_values($meals['Meal 1']['qty']), 
array_values($meals['Meal 1']['fooddesc']) 
) 

aray_combine()使用的鍵第一個參數,第二個參數值,這裏我們使用值第一陣列,作爲聯合數組的鍵。

+0

感謝阿卡姆。如果我不知道確切的吃飯次數,我該怎麼做?每餐計劃可能會有所不同。有些可能有4個,有些可能有8個。 – guyinjersey 2013-02-13 14:50:42

0

再次嘗試array_combine並使用count和for循環來組合數量和食物desc,然後使用unset刪除舊的qty/fooddesc數組。

我不知道這是否是最好的解決方案,但它的工作原理。 :)認爲我只是回答了我自己的問題。

// Fetch meal data 
while($row = mysqli_fetch_array($result)){ 
$meals[$row['mealdesc']] = array('optdesc' => $row['optdesc'], 'qty' => explode(",",  $row['qty']), 'fooddesc' => explode(",", $row['fooddesc'])); 
$notes = $row['notes']; 
} 

$j = count($meals); 
for($i = 1; $i <= $j ; $i++) 
{ 
$meals['Meal '.$i][food] = array_combine($meals['Meal '.$i]['qty'], $meals['Meal '.$i]['fooddesc']); 
unset($meals['Meal '.$i]['qty']); 
unset($meals['Meal '.$i]['fooddesc']); 
} 
// End Meal Plan 

這給了我:

Array 
(
    [Meal 1] => Array 
     (
      [optdesc] => upon awakening 
      [food] => Array 
       (
        [1] => egg 
        [6] => egg whites 
        [1/2 cup] => oatmeal 
        [2 slices] => wheat toast 
        [1 piece] => fruit 
        [1 cup] => berries 
       ) 

     ) 

    [Meal 2] => Array 
     (
      [optdesc] => 3 hours later 
      [food] => 
     )