2017-06-19 19 views
0

私はグループ化したい要素の集合を配列に入れてから返答を返します。私のループは次のようになります。より良く理解するためにforeachループの最適化

$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によって形成された複合主キーを持っているので、私は、各ページのすべての翻訳をたどることができます。

ループの後に2つの命令を取り除くためにできることがあるかどうかを知りたいと思います。すべてが配列の中で行える方法はありますか?

ありがとうございます!

答えて

0

私は最後の2行について心配しません。データをグループ化するためにそのメソッドを使用しようとすると、よくある問題です。

別の方法は、データをグループし直すことであろう...このコードの

<?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); 

コアは

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の、あります$ resultのforeachの場合、各IDのすべてのページのリストが表示されます。