Php эквивалентен Array.from() Javascript

#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