🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1258閲覧

foreachで取得した配列を結合したい(最終重複を排除するため)

d-xanthus

総合スコア56

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/02/07 02:25

編集2021/02/07 02:48

前提・実現したいこと

お世話になります。
WordPressで、あるカテゴリー記事で使用されているタグを
リスト化して表示したいと思っています。

最上位カテゴリーのタグのリスト化は問題無いのですが、
サブのカテゴリーがある場合、サブカテゴリーは表示できないので
サブカテゴリーのタグ(のID)を配列で取得し、
まとめて親カテゴリーのタグとして表示したいと考えています。

ただサブで使用されているタグは重複している場合もあるので、
サブの配列をひとつにまとめて、array_unique関数などで処理したいのですが
配列をひとつにまとめるところでつまづいています。

お知恵をお貸しいただけると幸いです。

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

Fatal error: Uncaught Error: Unsupported operand types in 〜(以下ファイルパス、エラー箇所)

該当のソースコード

php

1//サブカテゴリーの取得 args省略 2$child_terms = get_terms( 'doctor-category', $child_args ); 3 4if ( $child_terms ) {//子カテゴリーありなら 5 6 foreach ( $child_terms as $c_term ) { 7 $c_term_id = $c_term->term_id; //子タームID 8 9 //タグリストセット 10 // 現在のタームに属する投稿のIDを配列で取得 //カスタムタクソノミー(カテゴリー) doctor-category 11 $post_ids = get_objects_in_term( $c_term_id, 'doctor-category' ); 12 13 // 現在のタームに属する投稿で利用しているタグのオブジェクトを取得 //カスタムタクソノミー(タグ)doctor-tag 14 $get_child_tags = wp_get_object_terms( $post_ids, 'doctor-tag' ); 15 16 $ch_arrayterm = []; 17 foreach ( $get_child_tags as $ch_tag ) { 18 19 $ch_arrayterm[] = $ch_tag->term_id; //登録タグIDの配列を作成 20 } 21 22 $ch_arraylist += $ch_arrayterm; // += で配列を結合…のはず。? 23 24 }//foreach終了 25 26 $ch_arraylist_all = $ch_arraylist; 27 28 var_dump( $ch_arraylist_all ); //←確認しようとするとエラーがでます 29

試したこと

$ch_arraylist += $ch_arrayterm; のところ、 += の代入演算子配列を結合させようとするのですが上記のようなエラーメッセージが出てしまいます。
[]= だと配列の入れ子になってしまいますし、foreachの繰り返し数もまちまちなのでarray_merge関数も難しいのではと思っていますがどうなんでしょうか?

補足情報(FW/ツールのバージョンなど)

wordpress vr5.6.1
php 7.4.12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/02/07 02:43

>forreachで rが1つ多いです。 あと「最終的な配列の完成イメージ」を提示されたほうが回答付きやすいと思います。 あと、$ch_arraylistは初期化しないまま使ってますか?
d-xanthus

2021/02/07 02:57

質問のタイトルが間違えてましたね、ご指摘ありがとうございます。 「最終的な配列の完成イメージ」は、すいません、プログラミングに関してはほぼ素人でvar_dumpでの確認も何となく読めるという程度で、最終イメージというのが上手く表現できないのですが、array{ 〜 }がひとつになればまとまっているのかと認識してます。 あと$ch_arraylist の初期化というのは特に行っていないです。なにか必要となるのでしょうか?
hentaiman

2021/02/07 03:03

求める配列を直書きで作ってそれ質問に追記する事も回答してくれる人に情報を伝えるひとつの方法です。
d-xanthus

2021/02/07 07:05

ありがとうございます。$ch_arraylist = [] の記載を加えることで望む結果を得る事ができました。 ご指摘いただきまして感謝致します
guest

回答1

0

自己解決

$ch_arraylist =[]
の追記で解決する事ができました。
ご指摘頂きありがとうございました

php

1//サブカテゴリーの取得 args省略 2$child_terms = get_terms( 'doctor-category', $child_args ); 3 4if ( $child_terms ) {//子カテゴリーありなら 5 6 $ch_arraylist =[]; //←こちらの追記で解決しました。 7 8 9 foreach ( $child_terms as $c_term ) { 10 $c_term_id = $c_term->term_id; //子タームID 11 12 //タグリストセット 13 // 現在のタームに属する投稿のIDを配列で取得 //カスタムタクソノミー(カテゴリー) doctor-category 14 $post_ids = get_objects_in_term( $c_term_id, 'doctor-category' ); 15 16 // 現在のタームに属する投稿で利用しているタグのオブジェクトを取得 //カスタムタクソノミー(タグ)doctor-tag 17 $get_child_tags = wp_get_object_terms( $post_ids, 'doctor-tag' ); 18 19 $ch_arrayterm = []; 20 foreach ( $get_child_tags as $ch_tag ) { 21 22 $ch_arrayterm[] = $ch_tag->term_id; //登録タグIDの配列を作成 23 } 24 25 $ch_arraylist += $ch_arrayterm; // (+= で配列を結合…のはず。?) 26 27 }//foreach終了 28 29 $ch_arraylist_all = $ch_arraylist; 30 31 var_dump( $ch_arraylist_all );

投稿2021/02/07 07:10

d-xanthus

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問