

## 前提・実現したいこと

PHP(EC-
CUBE3.0.10を使用しています)でDBから対象(店舗名)のデータ(商品のカテゴリ)を取得して、そこから親カテゴリをさらに取得して表示させようとしています。

流れとしては  
①：ユーザ情報からユーザ名(店舗名と同一)を取得します。  
②：①で取得したユーザ名を使用して同一名のカテゴリ名を取得し配列に詰めます。  
③：②で取得したカテゴリより属する親カテゴリを取得します。  
④：表示させるため複数の配列のカテゴリの場合は1つに結合する。(foreachでループさせながら詰める感じですかね)

## 発生している問題・エラーメッセージ

forでやろうとしたのですが、配列ではforeachを使用したほうがよいということもありforeachを使用しようとしていますがforeachと配列を結合させるarray_mergeの使い方があまりよく分かっておらず…

## 該当のソースコード

[code]

    //店舗名はユーザ名と同一のためユーザ情報よりユーザ名を取得し以下の$nameに格納。
    $name = $app['user']->getName();
    //取得したユーザ名と合致するカテゴリ名を取得します
    $categories = $em->getRepository('\Eccube\Entity\Category')->findBy(array('name'=>$name));
    // TODO この取得してきたカテゴリ名が属する親カテゴリIDを取得したい。
    
[/code]

お知恵をお貸しいただけないでしょうか？  
よろしくお願いいたします。

* * *

## 追記(2013-06-23)

kitar様

ご回答ありがとうございます。

複数といいますか文章書く能力が低いため伝わりにくかったかと思います…  
申し訳ありません  
例としてカテゴリが以下のように登録されています。

食器  
店舗A  
店舗C  
家具  
店舗B  
店舗C

この場合、店舗Aと店舗Bの場合は `$categories` にそれぞれの情報が格納されます。

例：店舗B

[code]

      0 => Category {#1724 ▼
        -id: 10
        -name: "店舗B"
        -level: 2
        -rank: 6
        -create_date: DateTime {#1721 ▶}
        -update_date: DateTime {#1722 ▶}
        -del_flg: 0
        -CategoryCount: null
        -CategoryTotalCount: null
        -ProductCategories: PersistentCollection {#1733 ▶}
        -Children: PersistentCollection {#1735 ▶}
        -Parent: Category {#1782 ▶}
        -Creator: Member {#1374 ▶}
      }
    
[/code]

店舗Cの場合は店舗Cとして、食器に属している店舗Cと家具に属している店舗Cがあります。

[code]

      0 => Category {#1735 ▼
        -id: 11
        -name: "店舗C"
        -level: 2
        -rank: 7
        -create_date: DateTime {#1732 ▶}
        -update_date: DateTime {#1733 ▶}
        -del_flg: 0
        -CategoryCount: null
        -CategoryTotalCount: null
        -ProductCategories: PersistentCollection {#1744 ▶}
        -Children: PersistentCollection {#1746 ▶}
        -Parent: Category {#1793 ▶}
        -Creator: Member {#1792 ▶}
      }
      1 => Category {#1789 ▼
        -id: 13
        -name: "店舗C"
        -level: 2
        -rank: 3
        -create_date: DateTime {#1791 ▶}
        -update_date: DateTime {#1790 ▶}
        -del_flg: 0
        -CategoryCount: null
        -CategoryTotalCount: null
        -ProductCategories: PersistentCollection {#1788 ▶}
        -Children: PersistentCollection {#1786 ▶}
        -Parent: Category {#1784 ▶}
        -Creator: Member {#1792 ▶ …2}
      }
    
[/code]

配列のため、foreachを使用するのが理想なのかもしれませんが

[code]

    for ($i = 0; $i < count($categories); $i++) {
    ・・・
    }
    
[/code]

このforでも正しく動作はするため、forのやり方でもいいのですが…  
1つの時と複数の時とあるため、複数であったとしても問題なく動作するように詰め込みたいのです。

親カテゴリを取得するロジックはEC-
CUBEがデフォルトで別で持っていて`Category`のエンティティクラスの`getPath`にて取得できるためそれを使用する予定です。  
上のfor文の・・・の部分に以下のものを入れた際には、複数の場合に後からのもので上書きされていました。

[code]

    $category = $categories[$i]->getPath();
    
[/code]


CC BY-SA 3.0
2016-06-23T00:51:21.433
26967
2016-06-24T02:42:11.687
2016-06-23T06:26:21.717
10492
16918
question
php ec-cube
foreachとarray_mergeについて


> 食器  
>  店舗A  
>  店舗C  
>  家具  
>  店舗B  
>  店舗C

店舗名Aの場合、

> 食器  
>  店舗A

店舗名Cの場合

> 食器  
>  店舗C  
>  家具  
>  店舗C

と表示させたい、で認識あっていますか？  
であれば、質問にあわせる形であるなら

[code]

    $parents = array();
    foreach( $categories as $category ){
        $parent  = {親カテゴリの取得};
        $set_parents[ $parent["name"] ] = $parent;
        $parents = array_merge( $parents , $set_parents );
    }
    
[/code]

上記か、  
IDはユニークである、というルールに則られているのであれば、

[code]

    $parents = array();
    foreach( $categories as $category ){
        $parent  = {親カテゴリの取得};
        $parents [ $parent["id"] ] = $parent;
    }
    
[/code]

こちらでもいけるかと思います。


CC BY-SA 3.0
2016-06-24T02:42:11.687
27016
2016-06-24T02:42:11.687
16781
26967
answer