2011-03-25 85 views
0
foreach ($arr as $k => $v){ 

    foreach ($v as $e => $a){ 
    if($a == 1){break;} 
    //if $e has all 1's not just a single 1 (how to code it ?) 
    } 

} 

我怎么能告诉第一foreach功能突破时$e所有1PHP的foreach功能问题

显然,这不是我使用实际的代码,但它非常相似,我当它们的值($a)是1时需要遍历二维数组并记录密钥($e)。 (

注:

上面代码的第一个1之后完成我的阵列不一定由数字键

有解决这个问题..任何想法的,也许更好的方法! ?

谢谢你这么多

!例如:

Array 
(
    ["ny"] => Array 
     (
      [col0] => "" 
      [col1] => "" 
      [col2] => "" 
      [col3] => "" 
      [col4] => "" 
      [col5] => "" 
     ) 

    ["chicago"] => Array 
     (
      [col0] => "1" 
      [col1] => "1" 
      [col2] => "1" 
      [col3] => "1" 
      [col4] => "1" 
      [col5] => "1" 
     ) 
) 

我希望在经过芝加哥后能够停下来。

+2

请示例。 – Gordon 2011-03-25 18:33:46

+0

你可以尝试:array_unique($ v)并检查它是否有1个具有该特定值的项目。 – Jens 2011-03-25 18:37:35

+0

哦,示例添加! – Mohammad 2011-03-25 18:38:00

回答

2
foreach ($arr as $k => $v){ 
    if (count(array_diff($v, array(1))) == 0) { 
     break; 
    } 
} 
+0

你偷偷摸摸的混蛋,很好,可能比我的方法更有效。 – 2011-03-25 18:41:34

+0

@Kevin - 对于值的子集只有一个count(),所以它应该更快......虽然array_diff()可能比array_search()稍微慢一点,因为array_search()会停止搜索它的第一个匹配项发现 – 2011-03-25 18:44:05

+0

感谢提醒我,array_search不能解决这个问题(需要检查数组是否完全是1)。 – 2011-03-25 18:45:49

1

我不是100%确定你想要什么,但这会适合你的问题吗?

$totala = 10; 
$numa = 0; 
foreach ($arr as $k => $v){ 
    foreach ($v as $e => $a){ 
     if($a == 1){ 
      $numa++; 
     } 
     if($numa == $totala) { 
      break; 
     } 
    } 
} 

这样,当找到的次数1与您设置的总次数相同时,它将会中断。 (在这个例子中为10)。

+0

这实际上可以工作,它是否也会打破外部循环? – Mohammad 2011-03-25 18:40:31

+1

如果你使用'break 2;'它会的。 2指定它必须突破2个循环而不是最深的循环。 – tvkanters 2011-03-25 18:44:21