php搜索内部循环的数组

时间:2011-12-22 09:58:11

标签: php arrays loops logic

假设我有以下数组$diff

a, a, a, a, b, b, b, a, a, b, b, b, a, a, a, b

A represents a value inside $diff.
B represents an Array inside $diff.

现在,如果A的序列more than two timesis not an Arrayinstead a value),我必须计算[a] = not an array; 0 [a,a] = not an array; 0 [a,a,a] = not an array; 3 [a,a,a,a] = not an array; 4 [b] = array; [b,b] = array; [b,b,b] = array; [a] = not an array; 0 [a,a] = not an array; 0 [b] = array; [b,b] = array; [b,b,b] = array; [a] = not an array; 0 [a,a] = not an array; 0 [a,a,a] = not an array; 3 [b] = array; 。否则,请忽略它。

对于上述输入,代码应如下所示

<?php

foreach($diff as $key => $val)  {

    if (!is_array($diff[$key])) { // THIS MEANS THAT THE CURRENT ELEMENT IS NOT AN ARRAY. 
       if(is_array($diff[$key-1]) ) {   //START OF SEQ. IF THE PREVIOUS ELEMENT IS AN ARRAY AND CURRENT ELEMENT IS NOT AN ARRAY.

        $SEQ_START=$key;
        $n=1;

            for($i=0; $i<=count($diff); $i+=1) { // I AM CHECKING HERE IF THE NEXT 3 ELEMENTS are NOT ARRAY, HENCE I CAN INCREMENT IT

            if(!is_array($diff[$SEQ_START+$i])) $n+=1;
            else $n=0;
            }
        }
    }
}

?>

这是我的尝试,但它不起作用!,值被更改,因为值被替换。

{{1}}

3 个答案:

答案 0 :(得分:2)

根据@Grexis的评论

更新

$diff = array(array(),'a', 'a', 'a', 'a', array(), array(), array(), 'a', 'a', array(), array(), array(), 'a', 'a', 'a', array());

// Counter to hold current sequence total
$count = 0;
// Array to hold results
$counted = array();

// Loop array
foreach ($diff as $key => $val) {
  if (is_array($val)) { // If it is an array
    if ($count > 2) { // If the counter is more than 2
      $counted[(isset($seq)) ? $seq + 1 : 0] = $count; // add it to the array
    }
    // Reset the counter
    $count = 0;
    $seq = $key;
  } else {
    // Increment the counter
    $count++;
  }
} 
// If there is a >2 counter at the end, add one more result
if ($count > 2) {
  $counted[(isset($seq)) ? $seq + 1 : 0] = $count;
}

print_r($counted);
// Outputs:
// Array
// (
//     [0] => 4
//     [12] => 3
// )

// or if you want the total count
$total = array_sum($counted);
echo $total; // 7

See it working

答案 1 :(得分:1)

您需要的只是一个计数连续非数组值的计数器。使用每个数组值增加它,并使用每个非数组值重置它:

$seqLength = 0;
foreach ($arr as $index => $value) {
    if (is_array($value)) {
        $seqLength++;
        echo 'array';
    } else {
        $seqLength = 0;
        echo 'not an array';
    }
    if ($seqLength > 2) {
        echo '; '.$seqLength;
    } else {
        echo '; 0';
    }
}

答案 2 :(得分:0)

也许:

$a = array(1,1,1,1,1,array(1,1),1,1,1,1,1,array(1,1));
$i = 0;
$j = 0;
foreach ($a as $item){
    if ($i>=2){
        $j=$i + 1;
    }
    if (!is_array($item)){
        $i++;
        echo $j.'<br>';
    }else{
        $i=0;
        $j=0;
        echo '<br>';
    }   
}

输出:

0
0
3
4
5

0
0
3
4
5