2010-05-18 50 views
0

我有一個問題,我不知道如何讓它工作的最佳方式。PHP數組:帶有大量條件語句的循環數組。幫助/最佳做法

我需要循環槽如下所示的數組。我需要檢查[國家]索引是否與講西班牙語的國家(我預先定義的很多國家)相同,然後獲得相應國家的[標題]索引,檢查重複項目並創建新的更緊湊和簡化的數組。

原始數組:

Array 
(
    [0] => Array 
     (
      [title] => Jeux de pouvoir 
      [country] => France 
     ) 

    [1] => Array 
     (
      [title] => Los secretos del poder 
      [country] => Argentina 
     ) 

    [2] => Array 
     (
      [title] => Los secretos del poder 
      [country] => Mexico 
     ) 

    [3] => Array 
     (
      [title] => El poder secreto 
      [country] => Uruguay 
     ) 
) 
goes on and on.... 

爲了幫助您瞭解,最後的結果我需要看起來是這樣的:

Array (
    [0] => Array 
     (
      [title] => Los secretos del poder 
      [country] => Argentina, Mexico 
     ) 
    [1] => Array 
     (
      [title] => El poder secreto 
      [country] => Uruguay 
     ) 
) 

正如你可以看到,當有相同的標題對於很多國家來說,通過將這些條件添加到相應[標題]的相同[國家]索引中,數組會得到簡化。

你會怎麼做?

+0

我相信更多的上下文這裏需要,爲你提供了什麼簡單的解決辦法是不可能的 – Lizard 2010-05-18 14:23:40

+0

我不認爲有一個標準的方式來執行這個確切的任務。只要給它一個。 – Matchu 2010-05-18 14:24:11

回答

3

假設$ spanish_countries是西班牙語國家的數組...

foreach ($array as $a) { 
    if (in_array($a['country'], $spanish_countries)) { 
     $final_array[$a['title']][] = $a['country']; 
    } 
} 

這將導致在最後一個不同的數組,但將是微不足道的得到你的格式


編輯點評

foreach ($final_array as $k => $v) { 
    $r[] = array(
    'title' => $k, 
    'country' => implode(', ', $v) 
); 
} 
print_r($r); 

你會想要更好的變量名,但是這將工作

+0

嗨即時得到這樣的:! 陣列( [洛secretos德爾PODER] =>數組 ( [0] =>阿根廷 [1] =>墨西哥 [2] =>烏拉圭 ) [拉SOMBRA德爾PODER] =>數組 ( [0] =>西班牙 ) ) 我如何獲得[標題]索引內的電影標題? – Jonathan 2010-05-18 14:57:51

+0

檢查我的編輯.. – Galen 2010-05-18 15:04:09

+0

很棒@!謝謝,它的工作..我想知道是否有辦法簡化這兩個foreachs在一件事情?對不起,但即時通訊新的PHP :) – Jonathan 2010-05-18 15:08:00

1

嘗試:

$input = array(/* your data */); 
$output = $tmp = array(); 

foreach ($input as $v) { 
    if (!isset($tmp[$v['title']]) { 
    $tmp[$v['title']] = array(); 
    } 

    // here you can check if your counry is spanish speaking 
    if (!in_array($v['country'], $spanishSpeakingCountries)) { 
    continue; 
    } 

    $tmp[$v['title']][] = $v['country']; 
} 

foreach ($tmp as $k => $v) { 
    $output[] = array(
    'title' => $k, 
    'country' => implode(', ', $v) 
); 
} 

$output; // your output data 
+0

即時得到解析錯誤的位置: 的foreach($輸入爲$ V){ 如果(isset($ TMP [$ V [ '標題']){ – Jonathan 2010-05-18 15:03:58

1
​​

這將使你

Array (
    ['Los secretos del poder'] => Array 
     (
      [0] => Argentina 
      [1] => Mexico 
     ) 
    ['El poder secreto'] => Array 
     (
      [0] => Uruguay 
     ) 
) 
+0

你忘了檢查國家是否西班牙語說! – Galen 2010-05-18 14:33:55