Я пытаюсь вставить новый массив в массив
Я попытался вырезать его с помощью модуля и перевернуть его
<?php
literal(12);
function literal($sum){
$n;
for($i=0;$i<$sum;$i++){
$n[] = $i+1;
echo $n[$i];
$length = strlen($n[$i]);//count length reset every loop
$keeper = $n[$i]; //store on new variable reset every loop
for($m=0;$m<$length;$m++){
if ($keeper>=10){//just skip if below ten
$newstore[$m] = $keeper%(10^($length-($m+1)));
$keeper = floor($keeper/10);
}else {
$newstore[$m] = $keeper;// this value to keep array and reset it, then keep it again
}
}
$newstored = array_reverse($newstore);//reverse it and reset again
for($a=0;$a<count($newstored);$a++){
$fixed[] = $newstored[$a];
}
}
echo nl2br("\n".count($n)."\n");
for($i=0;$i<count($fixed);$i++){
echo $fixed[$i];
}
echo nl2br("\n".count($fixed));
}
?>
результат, который я хочу, был [1,2,3,4,5,6,7,8,9,1,0,1,1,1,2]
фактический результат, который я получил [1,2,3,4,5,6,7,8,9,1,1,0,1,1,0,1,1]
Спасибо






$ar = range(1,12);
// split each item
$ar = array_map('str_split', $ar);
// flatten array
$ar = array_merge(...$ar);
print_r($ar);
РЕДАКТИРОВАТЬ
Чтобы ваш код работал, просто измените его на
$newstore[$m] = $keeper%10;
Или, если вы хотите разделить на десять, не меняйте начальное значение
Я думаю, что результат отличался от моего. Потому что я тоже хочу умножить это.
@GigaPudding Ты уверен?
мне нужно сохранить $newstore[$m] = $keeper%(10^($length-($m+1))); потому что этот диапазон ввода до 10k
Можем ли мы просто сосредоточиться на моем коде, пожалуйста, я почти уверен, что я правильно сделал свой код, просто там что-то не так
просто измените на $newstore[$m] = $keeper%10; - sandbox.onlinephpfunctions.com/code/…
10^(length-($m+1)) такой же, как 10^(2-1), который есть 10, мне нужно сохранить (10^($length-($m+1))), потому что $length может быть 1-5
о, я понял, ты прав. просто измените на $keeper%10, не нужно модифицировать на 100 или 1000.
Другой способ, простой foreach() и str_split(),
<?php
$array = range(1,20);
$result = [];
foreach($array as $num){
if (strlen($num) < 2){
$result[] = $num;
}else{
$parts = str_split($num);
$result = array_merge($result,$parts);
}
}
print_r($result);
?>
РАБОЧАЯ ДЕМО:https://3v4l.org/QXRrW
это просто и правильно, но мне нужен другой ответ. Вы можете исправить меня в моем коде. что я сделал не так?
Чтобы получить желаемый результат, вы можете использовать спектр от 1 до 12 и использовать взрываться, чтобы превратить это в строку.
Затем используйте str_split для создания результирующего массива.
$res = str_split(implode(range(1,12)));
print_r($res);
Результат:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 1
[10] => 0
[11] => 1
[12] => 1
[13] => 1
[14] => 2
)
@Giga Это лучший ответ. Используйте этот; это не становится чище, чем это.
Я думаю, что заголовок уже дает понять. Мне нужно только использовать этот алгоритм
Чем просто изменить на
$newstore[$m] = $keeper%10;