我有一份文件" Operation"在symfony2项目中,该项目包含其他文档的嵌入式集合"命令"。我试图写一个交换两个命令位置的动作。我试图将该集合视为普通的PHP数组,但行为并不像预期的那样。
class Operation
{
...
/**
* The sequence of commands
* @MongoDB\EmbedMany(targetDocument="Command")
*/
protected $commands;
public function __construct()
{
$this->commands = new \Doctrine\Common\Collections\ArrayCollection();
$this->fallbacks = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
*
*/
public function swapCommands($index1, $index2)
{
$temp = $this->commands[$index1];
$this->commands[$index1] = $this->commands[$index2];
$this->commands[$index2] = $temp;
}
...
}
当我swapCommands()
时,受影响的元素将落在数组集合的底部。例如,假设我有命令['cd', 'ls', touch', 'mv']
。如果我尝试交换索引0和1,我得到[touch', 'mv', 'ls', 'cd']
。如何在数组集合中交换两个元素?我的最后一招是手动遍历集合并add()
每个元素......
答案 0 :(得分:0)
我找到了最好的方法,但不是最优雅的方式:
public function swapCommands($index1, $index2)
{
$arr = $this->commands->toArray();
$temp = $arr[$index1];
$arr[$index1] = $arr[$index2];
$arr[$index2] = $temp;
$this->commands = new \Doctrine\Common\Collections\ArrayCollection();
for ($i=0; $i < count($arr); $i++) {
$this->addCommand($arr[$i]);
}
}