2017-04-20 13 views
0

私はこのようなループを持つループの各反復に存在する回数をカウントし、私が見つけて、それを必要とする何PHPは価値が

Array 
(
[0] => Array 
    (
     [0] => TomVanhecker 
     [1] => PASS 
     [2] => Array 
      (
       [0] => Array 
        (
        ) 

      ) 

    ) 

) 

Array 
(
[0] => Array 
    (
     [0] => DonLay 
     [1] => PASS 
     [2] => Array 
      (
       [0] => Array 
        (
        [0] => ADDRESS CHECK FAILED 
        ) 

      ) 

    ) 

) 

Array 
(
[0] => Array 
    (
     [0] => PetraBerumen 
     [1] => REVIEW 
     [2] => Array 
      (
       [0] => Array 
        (
         [0] => ADDRESS CHECK FAILED 
        ) 

      ) 

    ) 

[1] => Array 
    (
     [0] => PetraBerumen 
     [1] => REVIEW 
     [2] => Array 
      (
       [0] => Array 
        (
         [0] => ADDRESS CHECK FAILED 
        ) 

      ) 

    ) 

[2] => Array 
    (
     [0] => PetraBerumen 
     [1] => REVIEW 
     [2] => Array 
      (
       [0] => Array 
        (
         [0] => ADDRESS CHECK FAILED 
        ) 

      ) 

    ) 

) 

各繰り返しで「ADDRESS CHECK FAILED」が何回表示されたかを比較して比較します。問題は$アドレス値が各ループでインクリメントし続けていることですが、私はちょうど現在の合計をループしている必要

foreach ($result_new as $count){ 
if ((in_array_r("ADDRESS CHECK FAILED", $count))){ 
$address++ 
} 
if($address > 2){ 
echo "There was more than two address failures for this customer"; 
} 

:私はこれを試してみました。

+1

"問題は、$アドレスの値が各ループで増分し続けているが、そのループの現在の合計が欲しいということです。私はあなたがそれぞれの$カウント配列内の発生の合計数を正確に数えたいと思っていると仮定していますか?その場合、https://gist.github.com/Billy-/bc6865066981e80e097fで定義されているin_array_r関数はブール値を返すので、カットしません。代わりにカウントを返すように修正する必要があります。 – clarkatron

+0

@clarkatronしかし、私が欲しいのは、それが何回真実であるのかを数えることですが、現在のループ全体ではなく、始めからやり直すことは意味がありますか? –

答えて

1

だけで行う必要があります。そうは次のように続いて

function in_array_recursive_count($needle, $haystack, &$current = 0, $strict = false) { 
    foreach ($haystack as $item) { 
     if ($strict ? $item === $needle : $item == $needle) { 
      $current++; 
     } 
     else if(is_array($haystack)) { 
      in_array_recursive_count($needle, $haystack, $current, $strict); 
     } 
    } 
    return $current; 
} 

を、あなたはそれを使用したいですforeachループの最後に$ addressの値をリセットするので、ループ全体ではなく現在の要素の値をカウントするたびに

foreach ($result_new as $count){ 
    if ((in_array_r("ADDRESS CHECK FAILED", $count))){ 
     $address++; 
    } 

    if($address > 2){ 
     echo "There was more than two address failures for this customer"; 
    } 

    $address = 0; 
} 
0

私は問題を正しく理解していた場合、私はあなたがこのような何かする必要があると思う:

foreach ($result_new as $count){ 
    $address = in_array_recursive_count("ADDRESS CHECK FAILED", $count); 
    if($address > 2){ 
     echo "There was more than two address failures for this customer"; 
    } 
}