Помогите пожалуйста, совсем уж не могу сообразить с элементарной задачей. Совсем уже потерял веру в решение данной задачи. В инете есть подобные решения с использованием функции подсчета количесва одинаковых значений но это не то что нужно. $arr = [1,2,3,4,4,4,5,6,7,8,9,9,9]; Как мне вывести на экран одинаковые значения. писал что то вроде: $arr = [1,2,3,4,4,4,5,6,7,8,9,9,9]; for($i=0;$i < count($arr);$i++{ if($arr[$i] == $arr[$i+1] or $arr[$i] == $arr[$i +2]{ echo $arr[$i]; } }
Что значит вывести одинаковые значения? Приведите пример как это должно выглядеть. Значения массива только цифры или числа или строки могут быть?
Код (Text): <?php $arr = [1, 2, 2, 2, 3, 4, 4, 5, 6, 6, 7, 9, 9, 9, 5]; $p = NULL; // Предыдущее значение $buff = ''; // Накопительный буфер do { $n = array_shift($arr); // Текущее значение if ($n == $p) { $buff .= $n; } else { if (strlen($buff) > 1) { echo $buff . "<br>"; } $buff = $p = $n; } } while ($n); Вместо буфера можно использовать счетчик, но мне кажется с буфером корректнее.
Больше нравится Так лучше? Код (Text): <?php $arr = [1, 2, 2, 2, 3, 4, 4, 5, 6, 6, 7, 9, 9, 9, 5]; $p = NULL; // Предыдущее значение $buff = ''; // Накопительный буфер while ($n = array_shift($arr)) { // Текущее значение if ($n == $p) { $buff .= $n; } else { if (strlen($buff) > 1) { echo $buff . "<br>"; } $buff = $p = $n; } } А в массиве именно цифры или может быть что-то другое? А то можно было бы другое решение выбрать.
Изучаем функции работы с массивами и делаем следующее: PHP: <?php $arr = [1,2,3,4,4,4,5,6,7,8,9,9,9]; // Считаем количество значений $count_values = array_count_values($arr); print_r($count_values); // Фильтруем те которых больше 1 $repits = array_filter($count_values, fn($el) => $el > 1); print_r($repits); PHP array_count_values & array_filter online
@Slava Rozhnev, написано же в первом сообщении - это не то, что нужно. Так каждый дурак может сделать Представьте, что надо написать этот алгоритм на ассемблере.
Как будет работать, если массив вот такой? $arr = [1,2,3,4,4,4,5,6,7,8,9,9,9,4,4,4,4,4,3,2,2,2,0,0,1,1,1,5]; Надо вывести 444 999 44444 222 00 111
Например так (используем str_repeat): PHP: <?php $arr = $arr = [1,2,3,4,4,4,5,6,7,8,9,9,9,4,4,4,4,4,3,2,2,2,0,0,1,1,1,5]; // Считаем количество значений $count_values = array_count_values($arr); // Фильтруем те котовых больше 1 $repits = array_diff( $count_values, [ 1 ] ); foreach($repits as $v=>$count) { echo str_repeat($v, $count) . PHP_EOL; } PHP str_repeat code online
@Slava Rozhnev, результат выполнения: 1111 2222 33 44444444 55 999 00 а надо 444 999 44444 222 00 111 Вы разницу не видите?
Где в вопросе говорится про идущие подряд одинаковые значения? Нужен правильный ответ - напишите грамотный вопрос
Зато есть вот что: "В инете есть подобные решения с использованием функции подсчета количесва одинаковых значений но это не то что нужно." А ниже код, который как бы намекает на то, что таки нужно. Я согласен, что вопрос задан не очень чётко. Но судя по всему это беда многих вопросов не только здесь
А если так: PHP: <?php $arr = [1,2,3,4,4,4,5,6,7,8,9,9,9,4,4,4,4,4,3,2,2,2,0,0,1,1,1,5]; preg_match_all('/1{2,}|2{2,}|3{2,}|4{2,}|5{2,}|6{2,}|7{2,}|8{2,}|9{2,}|0{2,}/', implode($arr), $m); print_r($m[0]); PHP preg_match_all online Код (Text): Array ( [0] => 444 [1] => 999 [2] => 44444 [3] => 222 [4] => 00 [5] => 111 )
Я вижу вы не унимаетесь С объединением в строку цифр и регуляркой - это самый очевидный вариант, но есть маленькая проблема - у нас массив, а элементами может быть что угодно. Вместо цифр могут быть буквы или вообще слова ;-) Но респект за упорство
Это я так, развлечения ради. Я думаю мы можем закрыть тему. К тому же топик-стартер никак не реагирует.