#javascript #php #arrays
#javascript #php #массивы
Вопрос:
Я хочу преобразовать часть javascript в php, чтобы он работал так, как мне нужно, однако я не могу найти эквивалент этому методу, не написав гораздо больше кода, чем необходимо.
const digits = Array.from({ length: 50 }, () => [randomNumber(4), randomNumber(4)]).concat(
Array(20).fill([1,1]));
function randomNumber(limit) {
return Math.floor(Math.random() * limit) 1;
}
Комментарии:
1. Что
randomNumber()
делает? Я имею в виду, что именно он делает. Я не могу запустить ваш код сейчас.2. просто генерирует случайное число; возвращает Math.floor(Math.random()*limit) 1;
3. Вместо того, чтобы фокусироваться на очень узком API, поймите, что должен делать этот код, и реализуйте PHP-код, который приведет к тому же результату.
Ответ №1:
Вот способ сделать это с помощью array_reduce
. Мы передаем ему массив всех чисел от 1 до 70 (сгенерированных с помощью range
), используя значение, чтобы определить, следует ли добавлять случайный массив из 2 элементов или фиксированный массив в наш выходной массив:
$arr = array_reduce(range(1, 70), function ($c, $v) {
$c[] = $v <= 50 ? [rand(1, 4), rand(1,4)] : [1,1];
return $c;
}, []);
Ответ №2:
- хорошо, вы можете сначала заполнить массив
[1,1]
уже имеющимся размером70
, используя array_fill . - Теперь вы можете просто пройти по массиву с помощью array_walk и проверить
$key
, меньше ли50
. Если да, вы генерируете случайные числа, иначе вы можете оставить все как есть.$arr = array_fill(0,70,[1,1]); array_walk($arr,function(amp;$value,$key){ if($key < 50) list($value[0],$value[1]) = [rand(0,4),rand(0,4)]; });
Комментарии:
1. Помимо того факта, что OP
randomNumber()
возвращает значения между 1 и 4, а ваше значение равно 0 и 4, это выглядит хорошо. Также69
должно быть70