我试图在Yii2中创建一个对象数组。但是,问题是数组中的对象完全没有区别。这是我正在尝试的内容:
$array1 = array(new Object, new Object, new Object);
$array2 = array_fill(0, 2, new Object);
乍一看,它们看起来一样,但输出却没有。
$ ARRAY1
[
0 => frontend\models\Object#1
(
[yii\db\BaseActiveRecord:_attributes] => []
[yii\db\BaseActiveRecord:_oldAttributes] => null
[yii\db\BaseActiveRecord:_related] => []
[yii\base\Model:_errors] => null
[yii\base\Model:_validators] => null
[yii\base\Model:_scenario] => 'default'
[yii\base\Component:_events] => []
[yii\base\Component:_behaviors] => []
)
1 => frontend\models\Object#2
(
[yii\db\BaseActiveRecord:_attributes] => []
[yii\db\BaseActiveRecord:_oldAttributes] => null
[yii\db\BaseActiveRecord:_related] => []
[yii\base\Model:_errors] => null
[yii\base\Model:_validators] => null
[yii\base\Model:_scenario] => 'default'
[yii\base\Component:_events] => []
[yii\base\Component:_behaviors] => []
)
2 => frontend\models\Object#3
(
[yii\db\BaseActiveRecord:_attributes] => []
[yii\db\BaseActiveRecord:_oldAttributes] => null
[yii\db\BaseActiveRecord:_related] => []
[yii\base\Model:_errors] => null
[yii\base\Model:_validators] => null
[yii\base\Model:_scenario] => 'default'
[yii\base\Component:_events] => []
[yii\base\Component:_behaviors] => []
)
]
这是$ array2
[
1 => frontend\models\Object#4
(
[yii\db\BaseActiveRecord:_attributes] => []
[yii\db\BaseActiveRecord:_oldAttributes] => null
[yii\db\BaseActiveRecord:_related] => []
[yii\base\Model:_errors] => null
[yii\base\Model:_validators] => null
[yii\base\Model:_scenario] => 'default'
[yii\base\Component:_events] => []
[yii\base\Component:_behaviors] => []
)
2 => frontend\models\Object#4(...)
3 => frontend\models\Object#4(...)
]
注意"对象"之后的数字。不像$ array1那样在$ array2中进行更改。这导致我的代码出现一些问题。我知道我可以简单地做array_push,但是这个特定的数组可能会变得非常大,我宁愿不使用循环来创建它。如果可以在一个命令中完成,我真的很想使用该方法。
答案 0 :(得分:4)
就我而言,就你所说,实现这一目标的更简洁的方法仍然是一个简单的循环:
$n = 56;
for ($i = 0; $i < $n; $i++) $array[] = new Object;
这是一个行解决方案,我认为它的工作速度非常快......有很多函数可以对数组的每个元素进行操作,但几乎所有函数都按照你描述的方式工作。那么为什么不使用简单的for循环呢?
即使阵列很大(如你所说),我认为这个解决方案没有任何问题。它是一条线,优雅,干净。即使http://www.php.net处的书呆子正在尽一切努力使内置函数快速运行,我也不认为任何内置函数(即使存在)都应该这样做真的快点。我没有测试速度,但我确信几乎没有差别。
然而你的问题非常好,多亏了它,我在php.net手册中阅读了所有的数组函数:http://php.net/manual/en/ref.array.php
我认为代码足够干净,但我会为其他人描述:
$array[] = new Object;
这会在new Object
的末尾附加array
。
在这种情况下,它会为array
提供从new Object
到0
的{{1}},例如:
55
PS。 单个命令(如你所说)看起来不错。它不像魔术命令一样工作,而且几乎总是有大量代码&#34;在它下面#34;。 唯一的方法,使用内置函数更好,几乎总是这样做准备&#34;在代码&#34;比你快。
这就是为什么我建议使用这个简单易读的解决方案,因为所有的数组漫游功能等都有很多很复杂的代码行:)。 哪种方法更快,只有基准可以说明,但我敢打赌,对于多达1000个对象,差异将是&#34;几乎没有&#34;。
到目前为止,由于该特定示例没有专用功能,您必须使用一些优雅的技巧&#34;关于为做某事而优化的功能之一...让我们说别的。 在这种情况下,此功能的工作速度会慢得多。