Array_reverse & quot; снова & quot;

Это мой первый пост, поэтому будьте снисходительны / снисходительны.

Этот массив является пошаговым перечислением программы вышивания

И я должен держать «0» значения между ненулевыми шагами и не принимать нулевые значения после

$oldArray = Array
("1278","1297","1278","1000","0","1000","1212","1001","1212","1278","1000",
"0","1297","1001","1000","0","1001","1278","1000","1001","1001","1278",
"0","1000","1001","0","0","0","0","0","0","0","0","0","0",
"0","0","0","0","0","0","0","0","0","0","0","0","0","0");

Я обращаюсь к нему в первый раз и нахожу первое ненулевое значение:

$arrayReversed = array_reverse($oldArray);

$lastKey = 48;

foreach ($arrayReversed as $key => $value) {
# If the value is not empty
if (!empty($value)) {
[FR] -> remplir un nouveau tableau avec les valeurs en partant de l’index «$ key» jusqu’a «$ lastKey»

[ENG] -> заполнить новый массив значениями, начиная с первого ключа с ненулевым значением до последнего ключа
Изменить: здесь была моя ошибка

        $sequencesFromEnd[] = array_slice($arrayReversed,$key,$lastKey);

Я исправил это с помощью этого кода:

        $sequencesFromEnd = array_slice($arrayReversed,$key,$lastKey);
break;

}
$key++;
}

Изменить: Тогда это работает, как я ожидал!

Тогда я хочу Реверс «снова» массив со значениями ибо есть шаги в правильном порядке и этот код не работает:

//First try

$stepsInRightOrder = array_reverse($sequencesFromEnd);

// Second try

//array_reverse($stepsInRightOrder);

Вторая попытка прокомментирована, потому что это неоперация.

К несчастью, массив остается таким, как он реализован в цикле «foreach» …

Большое спасибо заранее!

-1

Решение

Вы на самом деле не обращаете массив. Первый array_reverse инвертирует массив как

0-> 1278
1-> 1297
2-> 1278
3-> 1000 etc...

После первого array_reverse $ arrayReverse содержит

etc...
0-> 1000
1-> 1278
2-> 1297
3-> 1278

Обратите внимание, что только значения в массиве меняются местами, поскольку вы явно не сохраняете ключи. Затем вы выполняете цикл foreach, где, если значение не пустое, вы помещаете новый массив, который находится от текущего ключа до элемента key + 48, в новый массив, что означает, что у вас фактически есть массив в массиве, затем прервитесь, чтобы выйти из цикла foreach, так что массив будет содержать только ОДИН массив, который затем вы перевернете, но, поскольку он содержит только один массив, он будет таким же в обратном направлении:

0-> etc...
0-> 1000
1-> 1278
2-> 1297
3-> 1278

Вы переворачиваете только внешний массив, который содержит 1 элемент.

(Это было немного неясно … поэтому $ sequenceFromEnd [] на самом деле добавляет массив в новый массив. Вы можете использовать просто $ sequenceFromEnd = array_slice (…) или array_reverse ($ sequenceFromEnd [$ some_key]))

0

Другие решения

Если вы хотите удалить конечные нули

// Find the last not zero value
$lastkey = count($oldArray)-1;
while($lastkey and ! $oldArray[$lastkey ]) --$lastkey;
// Slice array
$stepsInRightOrder = array_slice($oldArray, 0, $lastkey+1);
print_r($stepsInRightOrder);

демонстрация

0

По вопросам рекламы [email protected]