PHP数组:使用大量条件语句循环遍历数组

时间:2010-05-18 14:16:32

标签: php arrays

我不知道如何让它以最佳方式运作。

我需要循环遍历下面的数组。我需要检查[country]索引是否等于西班牙语国家(我预定的许多国家),然后获得相应国家的那些[title]索引,检查重复项并创建新的更紧凑和简化的数组。 / p>

原始数组:

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
        ) 
)

正如您所看到的,当许多国家/地区都有相同的标题时,通过将这些国家/地区添加到相应[标题]的相同[国家/地区]索引来简化数组。

你会怎么做?

3 个答案:

答案 0 :(得分: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);

你想要更好的变量名称,但这将有效

答案 1 :(得分: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

答案 2 :(得分:1)

foreach($yourarray as $data)
{
    $newlist[$data['title']][] = $data['country'];
}

这会给你

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