Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Какой функцией можно подсчитать количество повторяющихся значений подряд? сохранив ключи первых из них

eLDeR Знаток (319), на голосовании 1 год назад
Есть массив
 Array 
(
[0] => image
[1] => paragraph
[2] => paragraph
[3] => image
[4] => image
[5] => paragraph
[6] => image
[7] => paragraph
[8] => paragraph
)
Из него надо получить:
 Array  
(
[0] => 1
[3] => 2
[6] => 1
)
игнорируя параграф, указывая для массива следующие с момента 1го изображения - их количество
Голосование за лучший ответ
Sergio 2.1 Оракул (67269) 1 год назад
Вы можете использовать следующую функцию для подсчета количества повторяющихся значений подряд в массиве, сохранив ключи первых из них:
 function count_consecutive_values($array, $value) { 
$result = array();
$count = 0;
foreach ($array as $key => $element) {
if ($element == $value) {
$count++;
if ($count == 1) {
$first_key = $key;
}
} else {
if ($count > 0) {
$result[$first_key] = $count;
$count = 0;
}
}
}
if ($count > 0) {
$result[$first_key] = $count;
}
return $result;
}
В вашем случае, вы можете вызвать эту функцию, передав ей исходный массив и значение 'image':
 $array = array('image', 'paragraph', 'paragraph', 'image', 'image', 'paragraph', 'image', 'paragraph', 'paragraph'); 
$result = count_consecutive_values($array, 'image');
print_r($result);
Этот код выведет следующий результат:
 Array 
(
[0] => 1
[3] => 2
[6] => 1
)
Сергей СтодольскийМастер (1212) 1 год назад
А не проще использовать array_search вместе с array_key?
Sergio 2.1 Оракул (67269) Сергей Стодольский, Функции array_search и array_keys могут быть использованы для поиска ключей элементов с определенным значением в массиве. Однако, они не позволяют подсчитать количество повторяющихся значений подряд, сохранив ключи первых из них.
Саня Семенов Оракул (60497) 1 год назад
 var arr = ["image","paragraph","paragraph","image","image","paragraph","image","paragraph","paragraph"] 
var uniqs = arr.reduce((acc, val) => {
acc[val] = acc[val] === undefined ? 1 : acc[val] += 1;
return acc;
}, {});
console.log(uniqs)
Самый День Оракул (99750) 1 год назад
 $array = Array('image', 'paragraph', 'paragraph', 'image', 'image', 'paragraph', 'image', 'paragraph', 'paragraph'); 

function _my($arr, $var){
$lines = count($arr);
$new_arr = array();
for ( $i = 0; $i < $lines; $i++ ){
if($arr[$i] == $var){
if(!empty($arr[$i+1])){
if ($arr[$i] == $arr[$i+1]){
if ( empty($I) ){ $I = $i; }
if ( empty($new_arr[$I]) ){ $new_arr[$I] = 2; }
else $new_arr[$I]++;
}
elseif ($arr[$i] != $arr[$i+1] and empty($I)) {
$new_arr[$i] = 1;
}
else $I = null;
}
}
}
print "
"; print_r($new_arr); print "
";
}

_my($array, 'image');
_my($array, 'paragraph');
?>
выведет
Array
(
[0] => 1
[3] => 2
[6] => 1
)
Array
(
[1] => 2
[5] => 1
[7] => 2
)
Похожие вопросы