假设我有以下数组$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 times
和is not an Array
(instead 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}}
答案 0 :(得分:2)
更新
$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
答案 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