2016-04-22 62 views
-1

這裏是我的數組:PHP多維數組的foreach - 不重複共同的價值

$tabs = Array(
[0] => Array 
    (
     [primaryTabID] => 001 
     [subtabID] => 
     [parent_tab] => 
     [primaryName] => Tab1 
     [subName] => 
     [BStatus] => 
    ) 

[1] => Array 
    (
     [primaryTabID] => 002 
     [subtabID] => 013 
     [parent_tab] => 002 
     [primaryName] => Tab2 
     [subName] => SubTab2-1 
     [BStatus] => A 
    ) 

[2] => Array 
    (
     [primaryTabID] => 003 
     [subtabID] => 015 
     [parent_tab] => 003 
     [primaryName] => Tab3 
     [subName] => SubTab3-1 
     [BStatus] => A 
    ) 

[3] => Array 
    (
     [primaryTabID] => 003 
     [subtabID] => 016 
     [parent_tab] => 003 
     [primaryName] => Tab3 
     [subName] => Subtab3-2 
     [BStatus] => A 
    ) 
) 

我在尋找列出每個主接片的名字只有一次,輸出然後如果有子選項卡每個上市主要標籤,這樣以後:

輸出:

001 -> Tab1 
    002 -> Tab2 
     013 -> SubTab2-1 
    003 -> Tab3 
     015 -> SubTab3-1 
     016 -> SubTab3-2 

的foreach語句的嵌套和的if-else有我完全糊塗。

+0

我不明白你怎麼想存儲的子選項卡。從顯示的輸出看來,你似乎想要一個關聯數組,但是013-> SubTab2是一個數組中的數組,與002-> Tab2一起? – Webeng

+0

我實際上將它們回顯到一個表中,所以將我的輸出看作一個數組是令人誤解的(對此很抱歉)。我的代碼回顯了第一列中的主標籤,然後是每個子標籤(如果有的話)在第二列。 – EotS

+0

你是什麼意思回聲在表中?這是MySql表嗎?將您的代碼發佈在表 –

回答

1

創建數組像這樣...

$out = array(); 
foreach($tabs as $tab) { 
    if(!empty($tab['primaryTabID'])) 
     $out[$tab['primaryTabID']]['main'] = $tab['primaryName'];   
    if($tab['primaryTabID'] == $tab['parent_tab']) 
     $out[$tab['primaryTabID']][$tab['subtabID']] = $tab['subName']; 
} 
echo "<pre>"; 
var_dump($out); 

然後,過程中它(輸出與你在上面顯示的內容相同..

foreach($out as $key => $tab) { 
     if(count($tab) == 1) { 
      echo $key . " -> " .$tab['main']."\n"; 
     } else { 
      foreach($tab as $subKey => $sub) { 
       if($subKey == "main") 
        echo $key . " -> " .$tab['main']."\n"; 
       else 
        echo "\t".$subKey . " -> " .$sub."\n"; 
      } 
     } 
    } 

輸出

001 -> Tab1 
002 -> Tab2 
    013 -> SubTab2-1 
003 -> Tab3 
    015 -> SubTab3-1 
    016 -> Subtab3-2 
+1

就是這樣!謝謝severinolorillajr! – EotS

0
$newArray = array(); 

foreach ($tab as $elements) 
{ 
    array_push($newArray, 
    array(
     $elements['primaryTabID'] => $elements['primaryName'], 
     $elements['subtabID'] => $elements['subName'] 
    ) 
); 
} 

讓我知道,如果那是你在找什麼!如果它沒有告訴我什麼是不同的,因爲我可能會誤會你是如何想的子選項卡將設在相對於主標籤

+0

中回顯您的數組每次發現時都會重複primaryTabID。我遇到困難的部分是獲取primaryTabID只顯示一次,然後subtabID顯示在其父標籤(primaryTab)下。 – EotS

+0

@EOTS不,我正在插入新的主標籤,而不是重複同一個標籤。對於for循環的每次迭代,$元素是不同的。當你說「下」時,具體是什麼意思?你想要一個多維數組還是隻有一個數組,其中的子標籤直接在它下面? – Webeng

0

嘗試這樣的事情

$newArray = array(); 
foreach ($tabs as $tab) 
{ 
    $key = array_search($tab['primaryName'], array_column($newArray, 'primaryTabID')); 
    if($key) 
    { 
     $newArray[$key]['subtabID'][] = $tab['subName']; 
    } 
    else 
    { 
     array_push($newArray, array('primaryTabID' => $tab['primaryName'], $tab['subtabID'] => array($tab['subName']))); 
    } 
} 
echo "<pre>"; 
var_dump($newArray); 
echo "</pre>"; 
1

您可以使用以下方法:

數據:

$tabs = array(
    0 => array(
     'primaryTabID' => '001', 
     'subtabID' => '', 
     'parent_tab' => '', 
     'primaryName' => 'Tab1', 
     'subName' => '', 
     'BStatus' => '', 
    ), 
    1 => array(
     'primaryTabID' => '002', 
     'subtabID' => '013', 
     'parent_tab' => '002', 
     'primaryName' => 'Tab2', 
     'subName' => 'SubTab2-1', 
     'BStatus' => 'A', 
    ), 
    2 => array(
     'primaryTabID' => '003', 
     'subtabID' => '015', 
     'parent_tab' => '003', 
     'primaryName' => 'Tab3', 
     'subName' => 'SubTab3-1', 
     'BStatus' => 'A', 
    ), 
    3 => array(
     'primaryTabID' => '003', 
     'subtabID' => '016', 
     'parent_tab' => '003', 
     'primaryName' => 'Tab3', 
     'subName' => 'Subtab3-2', 
     'BStatus' => 'A', 
    ), 
); 

代碼:

$new_tabs = array(); 

foreach($tabs as $key => $value) { 
    if (!array_key_exists ($value['primaryTabID'], $new_tabs)) { 
     $new_tabs[$value['primaryTabID']] = array('primaryName' => $value['primaryName']); 
    } 
    if (!empty($value['subtabID'])) { 
     $new_tabs[$value['primaryTabID']]['children'][$value['subtabID']] = $value['subName']; 
    } 
} 

foreach($new_tabs as $key => $value) { 
    echo '<p>'.$key.' -> '.$value['primaryName'].'</p>'; 
    if (!empty($value['children'])) { 
     echo '<ul>'; 
     foreach($value['children'] as $s_key => $s_value) { 
      echo '<li>'.$s_key.' -> '.$s_value.'</li>'; 
     } 
     echo '</ul>'; 
    } 
} 

輸出:

001 -> Tab1 

002 -> Tab2 

    013 -> SubTab2-1 

003 -> Tab3 

    015 -> SubTab3-1 
    016 -> Subtab3-2 
+0

這也適用,謝謝你Kostas。我已經檢查過severinolorillajr的解決方案,因爲它在那裏第一個,它的工作原理。您的解決方案同樣適用。 – EotS