1 回答
TA贡献1829条经验 获得超13个赞
悲伤的消息:你不能用于array_pad此目的。
您需要应用以下修复程序来消除该错误:
// array_pad($ideas, rand(10, 50), new $idea);
array_pad($ideas, rand(10, 50), $idea); // remove new
既然你已经在这里做了新的:
$idea = new class($ideas, $faker) {
尽管这会填满$ideas。$idea它会一遍又一遍地存储对您的相同引用。这意味着如果您更改一个元素,则所有元素都会发生此更改(我想这是不希望的)。
为了使其正常工作,您必须使用一个循环,它$idea为每个条目创建一个新的:
$faker = Faker\Factory::create('fr_FR');
$ideas = [];
for ($i = rand(10, 50); $i > 0; $i--) {
$ideas[] = new class($ideas, $faker) {
private $id;
private $author;
function __construct($ideas, $faker) {
$this->id = count($ideas) + 1;
$this->author = $faker->name;
}
};
}
工作示例。
附加信息
而不是这样做
for ($i = 1; $i <= rand(10, 50); $i++)
最好这样做
for ($i = rand(10, 50); $i > 0; $i--)
原因是每个循环都会调用比较,因此您会在每个循环上生成一个新的随机数。例子
这是有问题的,因为你往往会得到更多这样的低数字。例如,要获得 50 个循环,随机数必须> $i每次都返回 - 这是非常不可能的。
另一件事:array_pad返回填充的数组,所以你必须写
$ideas = array_pad(...
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报