Создайте новый массив внутри многомерного массива, увеличивайте имя каждого цикла - PullRequest
0 голосов
/ 12 июня 2019

Вопрос:

Как я могу выполнить итерации ниже, чтобы он проверял наличие ключа "round_1", при следующем запуске скрипта он должен проверять существование ключа "round_2" и т. Д. Каждый раз, когда он сталкивался с тем, что ключ отсутствуетон должен создать ключ.

Он работает с "round_1", как и ожидалось.

<?php

// Create array skeleton.

$array_skeleton = array_fill(1, 3, "");

print_r($array_skeleton);

// Populate the skeleton with random numbers, values [1 to 6].

foreach($array_skeleton as $key => $value) {
    $populated_array[$key] = random_int(1, 6);
};

print_r($populated_array);

// Create empty array for purpose to become multidimensional array.

$scorecard = [];

// Check if [round_1] is missing, if so create [round_1] and populate it.

if(!array_key_exists("round_1", $scorecard)) {
    echo "round_1 is missing, creating it";
    $scorecard["round_1"] = $populated_array;
}

print_r($scorecard);

Результат работает нормально, как и ожидалось, после первого запуска сценария:

(
    [round_1] => Array
        (
            [1] => 3
            [2] => 4
            [3] => 1
        )

)

Ожидаемый результат после запуска второго сценария: Примечание!Правильно, что значения будут разными для каждого раунда, поскольку они создаются случайным образом.

(
    [round_1] => Array
        (
            [1] => 3
            [2] => 4
            [3] => 1
        )
     [round_2] => Array
        (
            [1] => 1
            [2] => 4
            [3] => 2
        )

)

1 Ответ

0 голосов
/ 12 июня 2019

Я думаю, что весь ваш код может быть упрощен:

сначала определите функцию для создания массива со случайным числом:

function createRandomNumberArray($numOfElem, $maxRange) {
    for ($i = 0; $i < $numOfElem; $i++)
        $res[] = random_int(1, $maxRange);
    return $res;
}

Во-вторых, предполагая, что ваши ключи сделаны из "round_ @ INT @шаблон, который вы можете сделать

$biggest = max(array_map(function ($e) {$p = explode("_", $e); return $p[1];}, array_keys($arr)));

А теперь сделайте:

$newKey = "round_" . ($biggest + 1);
$scorecard[$newKey] = createRandomNumberArray(3,6);

Ссылка: Карта массива , Разнесите , max , random-int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...