2011-09-13 50 views
1

因此,我一直試圖弄清楚這一點,現在似乎被卡住了。我有一個multidimensionalarray,我試圖用特定的鍵輸出所有的值。下面是代碼:獲取具有某個關鍵值的所有值

//My Array: 
$services = array(
       array( service_name => 'facebook', 
        service_title => 'Facebook', 
        service_order => 0, 
        service_type => 'Social Networking' 
        ), 
       array( service_name => 'twitter', 
        service_title => 'Twitter', 
        service_order => 0, 
        service_type => 'Social Networking' 
        ), 
       array( service_name => 'tumblr', 
        service_title => 'MySpace', 
        service_order => 0, 
        service_type => 'Blogging' 
        ) 
); 

的問題是我要輸出的值由service_type例如「社交網絡」或「博客」我能,如果我使用一個foreach語句,像這樣做:

foreach($services as $service) { 
    if ($service['service_type'] == 'Social Networking') { 
      echo($service['service_title']); 
    } 
    if ($service['service_type'] == 'Blogging') { 
      echo($service['service_title']); 
    } 
} 

,直到我嘗試在類型之間添加標題像

foreach($services as $service) { 
    if ($service['service_type'] == 'Social Networking') { 
      echo($service['service_title']); 
    } 
    echo ('<h3> Blogging</h3>'); 
    if ($service['service_type'] == 'Blogging') { 
      echo($service['service_title']); 
    } 
} 

我已經瞭解了足夠知道的正常工作是因爲方式foreach循環工作,所以我一直在嘗試用while($service['service_type'] == 'Social Networking')(創建一個有趣的無限循環)和其他各種方式來做到這一點。

理想情況下,我想按service_type對數組排序,然後顯示結果,而不必在標題之間運行foreach循環。

對此的任何幫助將是令人敬畏的甚至是其他方式的建議。

回答

2

我認爲你正在嘗試做這樣的事情:

// Create an array containing all of the distinct "service types" 
// from the $services array 
$service_types = array(); 
foreach ($services as $service) { 
    // If we have not yet encountered this entry's "service type", 
    // then we need to add it to our new array 
    if (!in_array($service['service_type'], $service_types)) { 
     $service_types[] = $service['service_type']; 
    } 
} 
if (count($service_types)) { 
    // For each "service type", we want to echo a header and then 
    // a list of services of that type 
    foreach ($service_types as $current_type) { 
     echo '<h3>'.$current_type.'</h3>'; 
     // Loop through the services and echo those that are 
     // of the correct type 
     foreach ($services as $service) { 
      if ($service['service_type'] == $current_type) { 
       echo($service['service_title']); 
      } 
     } 
    } 
} else { 
    echo '<h3>No services</h3>' 
} 
+0

感謝那些讓我在正確的軌道上。我得到這個錯誤,雖然'警告:in_array()[function.in數組]:第二個參數錯誤的數據類型不知道這意味着什麼,但我會玩一點。如果你能解釋一些代碼,我也會喜歡它。我瞭解了大部分,但我越瞭解越好。 – BandonRandon

+0

_service_type_應該被引用。 '$ service [service_type]'應該在第3行和第4行上是'$ service ['service_type']''。另外,如果你想按服務類型進行排序,只需在第一個'foreach'後面添加'sort($ service_types) '。 – Herbert

+0

我添加了一些評論。我不確定爲什麼你會得到這個警告,代碼看起來一目瞭然。 – Hammerite

0

我沒有跟着你所有的問題,但你問,如果你可以根據業務類型數組排序 - 這樣你就可以建立一個user defined sorting function

function sortByServiceType($a, $b) { 
    // This will sort them by service type alphabetically 
    return strcmp($a['service_type'], $b['service_type']); 
} 

uasort($services, 'sortByServiceType'); 
7

用PHP> 5.5,你可以做

$myData = array(
    array(
     'service_name' => 'facebook', 
     'service_title' => 'Facebook', 
     'service_order' => 0, 
     'service_type' => 'Social Networking' 
    ), 
    array( 
     'service_name' => 'twitter', 
     'service_title' => 'Twitter', 
     'service_order' => 0, 
     'service_type' => 'Social Networking' 
    ), 
    array(
     'service_name' => 'tumblr', 
     'service_title' => 'MySpace', 
     'service_order' => 0, 
     'service_type' => 'Blogging' 
    ) 
); 

$filtered = array_column($myData, 'service_column'); 

見:http://www.php.net/manual/en/function.array-column.php

+0

這真了不起。太糟糕了,我_just_切換到了5.4,而且在我使用這個之前會有一段時間.. :( –

相關問題