foreach循环的优化

时间:2017-06-19 17:29:37

标签: php foreach phalcon

我有一组我想要分组的元素,然后将它们放入一个数组中以发回我的响应。我的循环看起来像这样:

$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组成的复合主键,因此我可以回溯每个页面的每个翻译。

我想知道在循环之后是否可以做些什么来摆脱两条指令。有没有办法可以在数组内部完成?

非常感谢!

1 个答案:

答案 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的所有页面的列表。