Уменьшение массива со сдвигом элементов влево

mouse_web

Новичок
Уменьшение массива со сдвигом элементов влево

Столкнулся с проблемой, необходимо обрезать массив справа со сдвигом элементов влево на пустые значения массива.

Например, есть массив:

PHP:
$array = array(
1=>"текст 1",
2=>"",
3=>"",
4=>"текст 4",
5=>"текст 5",
6=>"",
7=>"текст 7"
);
уменьшаем его на 2 элемента, в итоге должны получить:

PHP:
$array = array(
1=>"текст 1",
2=>"",
3=>"текст 4",
4=>"текст 5",
5=>"текст 7"
);
Есть у кого какие мысли, как это сделать? Заранее благодарен.
 

mouse_web

Новичок
array_values() вернет массив без пустых значений, он сделает сдвиг, но этот сдвиг будет некорректным.

Мне нужно чтобы все значения сжимались с конца к началу и если в начале присутствуют пустые значения, то они так и оставались пустыми.
 

zerkms

TDD infected
Команда форума
mouse_web
попробуй, пожалуйста, потом философствуй. окей?
 

mouse_web

Новичок
Для понимания простой пример, есть последовательность:

ХОХХОООХХ

отрезаем 2 последних значения, получаем:

ХОХХОХХ
 

zerkms

TDD infected
Команда форума
ps: для особо убогих и упёртых даже не лень написать кода пару строк (у самих мозга не хватает, обычно)

PHP:
$array = array(
1=>"текст 1",
2=>"",
3=>"",
4=>"текст 4",
5=>"текст 5",
6=>"",
7=>"текст 7"
);

unset($array[3]);
unset($array[6]);

$result = array_values(array(0 => '') + $array);
unset($result[0]);

var_dump($result);
 

mouse_web

Новичок
для особо "умных":

массивы приведены, как пример.
Массивы могут быть любой длины, пустые значения могут быть в любом месте и каждый раз массив надо сокращать на N элементов.

ну-ка напиши для особо убогих и упертых... прежде, чем все обосрать, вникни сначала в проблему!
 

zerkms

TDD infected
Команда форума
mouse_web
упал-отжался
PHP:
$array = array(
1=>"текст 1",
2=>"",
3=>"",
4=>"текст 4",
5=>"текст 5",
6=>"",
7=>"текст 7"
);

$num = 2;
foreach (array_reverse($array, true) as $key => $val) {
    if (empty($val)) {
        unset($array[$key]);
        $num--;
        if ($num <= 0) {
            break;
        }
    }
}

$result = array_values(array(0 => '') + $array);
unset($result[0]);

var_dump($result);
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
mouse_web
ну-ка объясни, почему в последовательности "ХОХХОООХХ" последние значения не ХХ, а ОО
 

zerkms

TDD infected
Команда форума
grigori
ХОХХОООХХ
входной аргумент: 2 => удаляем последние 2 пустые => ХОХХОOOХХ
 
Сверху