我有一组我想要分组的元素,然后将它们放入一个数组中以发回我的响应。我的循环看起来像这样:
$pages = $section->getPages();
$page_traduction_array = array();
$page_id = null;
foreach ($pages as $page){
if($page_id != $page->getId() && !is_null($page_id)) {
$page_dto = PageTraductionsDto::create($page_traduction_array);
array_push($this->pages, $page_dto);
$page_traduction_array = array();
}
array_push($page_traduction_array, $page);
$page_id = $page->getId();
}
$page_dto = PageTraductionsDto::create($page_traduction_array);
array_push($this->pages, $page_dto);
为了更好地理解,每个页面都有一个由ID和语言ID组成的复合主键,因此我可以回溯每个页面的每个翻译。
我想知道在循环之后是否可以做些什么来摆脱两条指令。有没有办法可以在数组内部完成?
非常感谢!
答案 0 :(得分:0)
我不担心最后两行,这是尝试使用该方法对数据进行分组时的常见问题。
另一种方法是重新分组数据......
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
class Page {
public $id;
public $data;
public function __construct($id, $data) {
$this->id = $id;
$this->data = $data;
}
public function getId() {
return $this->id;
}
}
$pages = [new Page(1,1), new Page(1,2), new Page(2,1) ];
$result = [];
foreach ($pages as $page) {
$result[$page->getId()][] = $page;
}
print_r( $result );
此代码的核心是foreach,它给出了...的结果。
Array
(
[1] => Array
(
[0] => Page Object
(
[id] => 1
[data] => 1
)
[1] => Page Object
(
[id] => 1
[data] => 2
)
)
[2] => Array
(
[0] => Page Object
(
[id] => 2
[data] => 1
)
)
)
然后,您可以在$ foreach
上获得结果,该结果将为您提供每个ID的所有页面的列表。