foreach循环不能处理单个结果

时间:2014-01-09 12:19:39

标签: php foreach

我在变量$details中存储了以下数组:

[formats] => Array ( 
        [format] => Array ( 
                 [0] => Array ( 
                    [formatId] => 1 
                    [code] => High 
                    [price] => Array ( 
                           [0] => 0.00 
                           [1] => 0.00 
                           [2] => 0.00 
                           [3] => 0.00 
                           [4] => 0.00 ) ) 
                  [1] => Array ( 
                     [formatId] => 2 
                     [code] => Med 
                     [price] => Array ( 
                            [0] => 0.00 
                            [1] => 0.00 
                            [2] => 0.00 
                            [3] => 0.00 
                            [4] => 0.00 ) ) 
                   ) )

我使用以下代码循环遍历此数组

<? foreach ($details['formats']['format'] as $format)
     {
        echo $format['code'];
     }
?>

哪个工作正常,但是,有时候数组中只有一个结果然后它看起来像这样:

[formats] => Array ( 
        [format] => Array ( 
                    [formatId] => 1 
                    [code] => High 
                    [price] => Array ( 
                           [0] => 0.00 
                           [1] => 0.00 
                           [2] => 0.00 
                           [3] => 0.00 
                           [4] => 0.00 )
                   ) )

不幸的是,我的每个循环都不起作用,因为它只是一个数组。怎么解决这个问题?我无法改变数组。

如果需要,我可以使用while或for循环,但我不知道如何

2 个答案:

答案 0 :(得分:4)

解决问题的一个非常粗略的方法是在它周围折叠'if';

<? 
if (isset($details['formats']['format'][0])){
    foreach ($details['formats']['format'] as $format)
    {
        echo $format['code'];
    }
} else {
    echo $details['formats']['format']['code'];
}
?>

仅当结果数组是一致的并且它总是在多个结果上返回[0]时才有效。

答案 1 :(得分:0)

这应该也可以。

if ( is_array($details['formats']['format']) && array_key_exists("code", $details['formats']['format']) ) {
    echo $details['formats']['format']['code'];
} else if ( is_array( $details['formats']['format'] ) {
    foreach ($details['formats']['format'] as $format)
    {
        echo $format['code'];
    }
}