質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

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

PHP

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

Q&A

解決済

1回答

292閲覧

コメントごとに、「コメント投稿者ID」と「コメントメタキー」の配列を作りたい

daijin

総合スコア17

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/12/09 16:46

編集2018/12/09 16:54

コメントごとに、そのコメント投稿者IDとコメントメタキーが入った配列を作りたいです。
###実現したいこと
現状としては、
投稿ID「7、4」についてget_claimをかけると、コメントID「28、25、16」が配列で取得できる状況でして(下記ソースコードの➃のところです)

目的としては、
このコメントID「28、25、16」のそれぞれから
・コメントの「投稿者ID」
・コメントの「メタキーstarの数」
が入った配列を作りたいと考えています。

理想の配列はこうです。

php

1array(2) { 2 ["7"]=> array(2) { // 投稿ID 3 ["28"]=> array(2) { // コメントID 4 ["author"]=> string(1) "1" // 投稿者ID 5 ["score"]=> string(1) "4" // starの数 6 } 7 ["25"]=> array(2) { // コメントID 8 ["author"]=> string(1) "1" // 投稿者ID 9 ["score"]=> string(1) "0" // starの数 10 } 11 } 12 ["4"]=> array(1) { // 投稿ID 13 ["16"]=> array(2) { // コメントID 14 ["author"]=> string(1) "2" // 投稿者ID 15 ["score"]=> string(1) "9" // starの数 16 } 17 } 18}

ご覧のように、投稿ID7と4について、そのコメントごとに「投稿者ID」「メタキーstarの数」が入った配列です。
###発生している問題
配列が大量に重複して生成されてしまいます。

###該当のソースコード

php

1/* ➀: 投稿IDを配列で取得 */ 2$product_array = array( 7, 4 ); 3 4/* ➁: 投稿IDについての処理 */ 5foreach ( $product_array as $product_id ) { 6 7 /* ➂: 投稿IDのキーを持つ配列を作っておく */ 8 $all_claim_array = array( 9 $product_id=>array() 10 ); 11 12 /* ➃: 投稿IDから、その投稿に対してされたコメントIDを配列で取得 */ 13 $claim_array = get_claim( $product_id ); //get_claimは独自に定義し正常に作動します。 14 15 /* ➄: コメントについての処理 */ 16 foreach ( $claim_array as $claim_id ) { 17 18 /* ➅: コメントのスコアを取得 */ 19 $score = get_post_meta( $claim_id, 'star', true ); 20 21 /* ➆: コメントの投稿者IDを取得 */ 22 $post = get_post( $claim_id ); 23 $claim_author_data = get_userdata( $post->post_author ); 24 $claim_author_id = $claim_author_data->ID; 25 26 /* ➇: コメントIDのキーを持つ配列を作り、投稿者IDとstarの数を入れる */ 27 $tmp[$claim_id] = [ 28 'author'=> $claim_author_id, // 投稿者ID 29 'score' => $score // starの数 30 ]; 31 array_push( $all_claim_array, $tmp ); 32 } 33} 34/* ➈: 確認 */ 35var_dump( $all_claim_array ); // なぜか重複した配列が生成されまくってしまう!

以上のソースコードについて、先述の理想の配列にするために変更すべき点について教えて頂けましたら嬉しいです。
素人のソースコードで見にくい点が多々あるかとは存じますが、何卒宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

配列の使い方が誤ってるのが原因です。
以下で実現できるかと思いますのでご確認ください。

PHP

1$product_array = array( 7, 4 ); 2foreach ( $product_array as $product_id ) { 3 $claim_array = get_claim( $product_id ); 4 $comment_array = []; 5 foreach ( $claim_array as $claim_id ) { 6 $score = get_post_meta( $claim_id, 'star', true ); 7 ~省略~ 8 $claim_author_id = $claim_author_data->ID; 9 $comment_array[$claim_id] = [ 10 'author'=> $claim_author_id, // 投稿者ID 11 'score' => $score // starの数 12 ]; 13 } 14 $all_claim_array[$product_id] = $comment_array; 15}

で、根本的な話になるのですが、最終的な目的はどのようなものでしょうか?
というのも、wordpressの知識が無くて申し訳ないのですが、わざわざ上記のような配列を自作するような処理が本当に必要なのかを気にしています。get_comment関数等では目的を実現できないのでしょうか?

また、目的が、wordpressで何か実現したいというものではなく、単純にPHPの勉強をしたいということでしたら、まずは入門書を一読された方がスムーズに知識を吸収できるかと思います。

ご自身の目的に合わせて、ご検討いただければと思います。

最後に1点アドバイスなのですが、
どのような事象が起きているのかは丁寧に記載された方が、第三者に伝わりやすいです。
「配列が大量に重複して生成されてしまいます。」
と記載されても、第三者には事象が分からないです。

投稿2018/12/09 17:38

aikon_marimo

総合スコア1083

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

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

daijin

2018/12/09 17:58

ご回答感謝致します。 配列に入門したてで、複数や入れ子になると途端にわからなくなってしまいます。 あとget_commenですが、どうやらコメントの投稿タイプがカスタム投稿タイプになっている場合に効果が発揮できないみたいなんです。なので自作しようと考えました。今回は「claim」というカスタム投稿タイプなので。 第三者目線で何がわかりにくいか、必要な情報はなんなのか。それすら至らず申し訳ございません。なんにせよ、仰るように書籍からですね。 最後に改めまして、どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問