2014-09-28 128 views
-1

我在創建基於現有數組的新數組時遇到問題。我有以下數組,並且想要將元素'id'與'parent'元素進行匹配。如果值相同,那麼我想創建另一個數組,其中的子元素將在父元素下。從現有的數組中創建一個新的數組php

Array 
(
    [0] => Array 
     (
      [id] => 66 
      [parent] => 26 

     ) 

    [1] => Array 
     (
      [id] => 47 
      [parent] => 26 

     ) 

    [2] => Array 
     (
      [id] => 48   
      [parent] => 66 

     ) 

我想這是

Array 
    (
     [0] => Array 
      (
       [id] => 66 
       [parent] => 26 

      ) 
      [0] => Array 
      ( 

         [id] => 48 
         [parent] => 66 


      ) 

     [1] => Array 
      (
       [id] => 47 
       [parent] => 26 

      ) 

我堅持以下code.I已經拿到了值,但我不知道如何搭配使用陣列中的另一個元素。

foreach($firstlevel_results as $k => $v) 
{ 
    echo $v['id']."==".$v['parent']."==".$v['grandparent']."<br>"; 
} 

請建議是否有任何可能的方法。

+0

這難以證明自己試圖爲自己做! **這不是一個免費的編碼網站**請閱讀[如何提出一個很好的問題](http://stackoverflow.com/help/how-to-ask) – RiggsFolly 2014-09-28 14:25:57

+0

我仍然在嘗試,並感謝鏈接。 – Raj 2014-09-28 14:29:44

+0

我編輯了我的問題。謝謝。 – Raj 2014-09-28 14:49:04

回答

0

儘管看起來很長的代碼很容易。基本上,這個想法應該是它:

$my_array = Array(
    Array ('id' => 66, 'parent' => 26, 'grandparent' => 18), 
    Array ('id' => 23, 'parent' => 66, 'grandparent' => 57), 
    Array ('id' => 47, 'parent' => 26, 'grandparent' => 18), 
    Array ('id' => 48, 'parent' => 66, 'grandparent' => 26), 
    Array ('id' => 11, 'parent' => 66, 'grandparent' => 89), 
    Array ('id' => 200, 'parent' => 98, 'grandparent' => 26) 
); 

function merge($target_id, $target_array) { 
    #1) Find subarray with ID == $target_id 
    $new = array(); 
    # fast path (better than array_filter) 
    foreach ($target_array as $key => $sub_array) { 
     #find array with id == $target_id 
     if ($sub_array['id'] === $target_id) { 
      # first index will be super group 
      $new[0] = array($sub_array); 
      # removing it... 
      unset($target_array[$key]); 
      # it's not need continue anymore... 
      break; 
     } 
    } 

    # 2) and now gonna compare ids with targert_id 
    foreach ($target_array as $index => $sub_array) { 

     if ($sub_array['parent'] == $target_id) { 
      # index 0 is the super group as said early... 
      array_push($new[0], $sub_array); 

     } else { 
      # only push but not groups 
      array_push($new, $sub_array); 
     } 
    } 

    return $new; 
} 


print_r(merge(66, $my_array)); 

當然,有這碼點可以改進的,但是這是想法。

+0

非常感謝@ felip.Almost close。只有一件事情,如果可以把id-23,48,11置於id 66之下。現在它們都處於同一水平。 – Raj 2014-09-28 15:43:10

+0

還有一個問題是我不能在函數內傳遞66,它需要在一個循環內計算。但這個想法很好,我會再試一次。謝謝。 – Raj 2014-09-28 15:56:22

+0

@Raj是的,但密鑰將被覆蓋。名爲「merge」的函數通過第一個索引中的匹配連接匹配數組。我認爲這是最好的方法。 – felipsmartins 2014-09-28 15:56:48

相關問題