удалить каждую букву N (цикл) - PullRequest
3 голосов
/ 25 января 2012

Я нашел здесь много ответов на мой вопрос, но я не могу найти именно то, что я ищу.
Я должен удалить каждую 4-ю цифру из массива, но начало и конец образуют круг, так что если яудалите 4-ю цифру в следующем цикле. Это будет другая цифра (может быть, 4-я или 3-я). Это зависит от того, сколько цифр у нас в строке

$string = "456345673474562653265326";
$chars = preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY);
$result = array();
for ($i = 0; $i < $size; $i += 4) 
{
    $result[] = $chars[$i];
}

Ответы [ 4 ]

3 голосов
/ 25 января 2012

Вы можете попробовать сделать это с preg_replace:

$string = "12345678901234567890";
$result = preg_replace("/(.{3})\d/", "$1", $string);
0 голосов
/ 25 января 2012
<?php
$string = "abcdef";
$chars = str_split($string);

$i = 0;
while (count($chars) > 1) {
    $i += 3;
    $n = count($chars);
    if ($i >= $n)
        $i %= $n;

    unset($chars[$i]);
    $chars = array_values($chars);

    echo "DEBUG LOG: n: $n, i: $i; s: " . implode($chars, '') . "\n";
}
?>

Выход:

DEBUG LOG: n: 6, i: 3; s: abcef
DEBUG LOG: n: 5, i: 1; s: acef
DEBUG LOG: n: 4, i: 0; s: cef
DEBUG LOG: n: 3, i: 0; s: ef
DEBUG LOG: n: 2, i: 1; s: e
0 голосов
/ 25 января 2012

Решение без регулярных выражений

$string = "123412341234";
$n = 4;
$newString = implode('',array_map(function($value){return substr($value,0,-1);},str_split($string,$n)));

var_dump($newString);
0 голосов
/ 25 января 2012

Вы можете попробовать это (мой PHP ржавый, поэтому я не уверен, будет ли стираться этот способ):

$string = "123412341234";
$result = array();
$n = 4; // Number of chars to skip at each iteration

$idx = 0; // Index of the next char to erase
$len = strlen($string);
while($len > 1) { // Loop until only one char is left
    $idx = ($idx + $n) % $len; // Increase index, restart at the beginning of the string if we are past the end
    $result[] = $string[$idx];      
    $string[$idx] = ''; // Erase char
    $idx--; // The index moves back because we erased a char
    $len--;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...