2011-03-25 88 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