Laravel & Faker дает не случайный элемент массива

У меня проблема с Laravel и Faker. Я хочу выбрать случайный элемент из массива с помощью функции randomElement подделки. У меня есть этот простой код:

$siloID = DB::table('silos')->pluck('id');
echo(print("silos: ".$siloID));
echo(print("\nrandom element: ".$faker->randomElement($siloID)));

который возвращает мне это на консоли:

бункеры: [3,9,14,18,21,93,42,55,88,99,31,38,65,1,23,68,98,13,39,40,45,49,59,6 ,11,24,25,60,64,90,94,97,100,4,15,7,26,29,85,35,43,75,22,48,58,80,86,87,62,82 ,89,30,95,12,28,33,73,17,27,57,72,74,83,91,69,78,37,76,81,20,53,79,32,46,56 ,77,92,34,41,44,67,16,19,52,61,96,5,10 ,47,51,54,84,2,36,66,71,50,70,8,63 ]1

случайный элемент: 851

Я этого не понимаю, потому что 851 нет в массиве? Что я сделал не так?


person Florian Falk    schedule 16.11.2019    source источник


Ответы (2)


Объединение echo и print создает проблему (добавление 1 в конце из-за скобок). Метод $faker randomElement работает правильно.

Чтобы исправить, просто удалите лишний метод php.

echo("silos: ".$siloID);
echo("\nrandom element: ".$faker->randomElement($siloID));

Поскольку я подозреваю, что это просто для тестирования вывода, и ваш окончательный код не потребует объединения статусов echo / print, метод $faker должен работать нормально для вас.

person Watercayman    schedule 16.11.2019
comment
Благодарность! Просто из интереса. Что делает печать, что это идет не так? - person Florian Falk; 17.11.2019
comment
Это не совсем «неправильно», это просто используется не так, как вы предполагали. Вы можете протестировать, играя с переменной и добавляя/удаляя оператор печати внутри эха. Иногда он будет добавлять =>1, что было подсказкой. Существует интересный ответ SO о том, как это обрабатывается в PHP здесь< /а> - person Watercayman; 17.11.2019

Вы можете сделать что-то похожее на пример ниже. Он вернет вам случайный элемент массива. здесь я сохраняю значение случайного массива в формате JSON в базу данных

$factory->define(Rule::class, function (Faker $faker) {

    $rule = [
        'age' => [
            'borrower_age_min'  => 'min:21',
            'borrower_age_max'  => 'max:75'
        ],
        'affordability' => [
            'annual_income' => 'integer|min:40000',
            'loan_amount'   => 'integer|max:3*',
        ],
        'finance' => [
            'loan_length'   => 'integer|max:12',
            'loan_amount'   => 'integer|max:500000',
        ]
    ];

    return [
        'rule'     => json_encode([
            $faker->randomElement(
                [
                    $rule['age']['borrower_age_min'],
                    $rule['age']['borrower_age_max'],
                    $rule['affordability']['annual_income'],
                    $rule['affordability']['loan_amount'],
                    $rule['finance']['loan_length'],
                    $rule['finance']['loan_amount']
                ]
            )
        ])
    ];
});
person Invincible    schedule 01.07.2020