foreachとarray_mergeについて
前提・実現したいこと
PHP(EC-CUBE3.0.10を使用しています)でDBから対象(店舗名)のデータ(商品のカテゴリ)を取得して、そこから親カテゴリをさらに取得して表示させようとしています。
流れとしては
①:ユーザ情報からユーザ名(店舗名と同一)を取得します。
②:①で取得したユーザ名を使用して同一名のカテゴリ名を取得し配列に詰めます。
③:②で取得したカテゴリより属する親カテゴリを取得します。
④:表示させるため複数の配列のカテゴリの場合は1つに結合する。(foreachでループさせながら詰める感じですかね)
発生している問題・エラーメッセージ
forでやろうとしたのですが、配列ではforeachを使用したほうがよいということもありforeachを使用しようとしていますがforeachと配列を結合させるarray_mergeの使い方があまりよく分かっておらず…
該当のソースコード
//店舗名はユーザ名と同一のためユーザ情報よりユーザ名を取得し以下の$nameに格納。
$name = $app['user']->getName();
//取得したユーザ名と合致するカテゴリ名を取得します
$categories = $em->getRepository('\Eccube\Entity\Category')->findBy(array('name'=>$name));
// TODO この取得してきたカテゴリ名が属する親カテゴリIDを取得したい。
お知恵をお貸しいただけないでしょうか?
よろしくお願いいたします。
追記(2013-06-23)
kitar様
ご回答ありがとうございます。
複数といいますか文章書く能力が低いため伝わりにくかったかと思います…
申し訳ありません
例としてカテゴリが以下のように登録されています。
食器
店舗A
店舗C
家具
店舗B
店舗C
この場合、店舗Aと店舗Bの場合は $categories
にそれぞれの情報が格納されます。
例:店舗B
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 ▶}
}
店舗Cの場合は店舗Cとして、食器に属している店舗Cと家具に属している店舗Cがあります。
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}
}
配列のため、foreachを使用するのが理想なのかもしれませんが
for ($i = 0; $i < count($categories); $i++) {
・・・
}
このforでも正しく動作はするため、forのやり方でもいいのですが…
1つの時と複数の時とあるため、複数であったとしても問題なく動作するように詰め込みたいのです。
親カテゴリを取得するロジックはEC-CUBEがデフォルトで別で持っていてCategory
のエンティティクラスのgetPath
にて取得できるためそれを使用する予定です。
上のfor文の・・・の部分に以下のものを入れた際には、複数の場合に後からのもので上書きされていました。
$category = $categories[$i]->getPath();