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

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

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

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

PHP

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

Q&A

解決済

1回答

1057閲覧

配列の中の値を上手に取得して、get_post_metaを機能させたい

daijin

総合スコア17

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/12/09 09:12

編集2018/12/09 10:23

get_post_metaの対象になる値を取得したいのですが、配列の中にその値があるせいか、上手に取得できません。

$idは取得できても、$scoresができないのです。
これはどうしたらよろしいでしょうか?

PHP

1$array_base = array( 187, 284 ); 2$array = array(); 3foreach ( $array_base as $id ) { 4 $ids = get_post_ancestors( $id ); 5 $scores = get_post_meta( $ids, 'score', true ); // 機能しない 6 $tmp = [ 7 'ids' => $ids, 8 'scores' => $scores 9 ]; 10 array_push($array, $tmp); 11} 12var_dump( $array );

最終的にはこの配列を作ることが目的です。

php

1array(2) { 2 [0]=> array(2) { 3 ["ids"]=> array(2) { 4 [0]=> "497" 5 [1]=> "494" 6 } 7 ["scores"]=> array(2) { 8 [0]=> "54" 9 [1]=> "44" 10 } 11 } 12 [1]=> array(2) { 13 ["ids"]=> array(2) { 14 [0]=> "472" 15 [1]=> "471" 16 } 17 ["scores"]=> array(2) { 18 [0]=> "78" 19 [1]=> "86" 20 } 21 } 22}

流れとしては、$array_baseの中の187と284というIDを基にし、それぞれに紐づくIDを$idsとして取得します。ここで取得されたIDが497と494と472と471です。
そして今回のget_post_metaはこの4つを対象にして、scoreを取得したいわけです。

つまり上記の最終的な配列にあるのは下記を意味します。

497のscoreが54
494のscoreが44
472のscoreが78
471のscoreが86

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/12/09 09:19

var_dump の機能を勉強して出直しましょう
daijin

2018/12/09 09:20

get_post_metaを機能させたいですね。
guest

回答1

0

ベストアンサー

【PHPのvar_dumpで変数や配列の内容を出力する方法 | TechAcademyマガジン】
https://techacademy.jp/magazine/11585

php

1 $data = "abcde"; 2 var_dump($data);

画面では以下のように表示されます。

string(5) "abcde"

「string」は変数が文字列であることを示し、( )内にはそのバイト数が表示されます。ここでは半角の英数字が5つ格納されているため「5」となります。


追記:

PHP

1$ids = get_post_ancestors( $id ); 2if ( empty( $ids ) ) continue; 3$scores = get_post_meta( array_pop( $id ), 'score', true );

【get_post_ancestors – WordPress私的マニュアル】
https://elearn.jp/wpman/function/get_post_ancestors.html

【PHP: array_pop - Manual】
http://php.net/manual/ja/function.array-pop.php

【PHP: array_shift - Manual】
http://php.net/manual/ja/function.array-shift.php


追記:

そもそも質問文の変数がおかしかったので整理。

PHP

1$array_base = array( 187, 284 ); 2$array = array(); 3foreach ( $array_base as $id ) { 4 $ids = get_post_ancestors( $id ); 5 if ( empty( $ids ) ) continue; 6 $scores = get_post_meta( array_pop( $ids ), 'score', true ); 7 $tmp = [ 8 'ids' => $id, 9 'scores' => $scores 10 ]; 11 array_push($array, $tmp); 12} 13var_dump( $array );

追記:

PHP

1$array_base = array( 187, 284 ); 2$array = array(); 3foreach ( $array_base as $id ) { 4 $ids = get_post_ancestors( $id ); 5 if ( empty( $ids ) ) continue; 6 $scores = get_post_meta( $ids[ count( $ids ) - 1 ], 'score', true ); 7 $tmp = [ 8 'ids' => $ids, 9 'scores' => $scores 10 ]; 11 array_push($array, $tmp); 12} 13var_dump( $array );

追記:

PHP

1$array_base = [ 187, 284 ]; 2$array = []; 3foreach ( $array_base as $id ) { 4 $ids = get_post_ancestors( $id ); 5 if ( empty( $ids ) ) continue; 6 $scores = []; 7 foreach ( $ids as $i ) { 8 $scores[] = get_post_meta( $i, 'score', true ); 9 } 10 $array[] = [ 11 'ids' => $ids, 12 'scores' => $scores 13 ]; 14} 15var_dump( $array );

投稿2018/12/09 09:30

編集2018/12/09 12:59
kei344

総合スコア69364

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

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

daijin

2018/12/09 09:36

ご説明感謝致します。 入れ違いで質問内容を簡略化し、わからない点(var_dumpとstringの関係)は削除し、知りたい点(get_post_metaでの取得方法)だけに絞らせて頂きました。 とはいえ、var_dumpとstringの関係について知ることができたのはうれしいです。ありがとうございます。
daijin

2018/12/09 10:05 編集

追記ありがとうございます。array_popやarray_shiftは今後使えそうなので是非覚えておきたいところではありますが、今回の質問とは無関係では? 目的はこうですが、 array(2) { [0]=> array(2) { ["ids"]=> array(2) { [0]=> "497" [1]=> "494" } ["scores"]=> array(2) { [0]=> "54" [1]=> "44" } } [1]=> array(2) { ["ids"]=> array(2) { [0]=> "472" [1]=> "471" } ["scores"]=> array(2) { [0]=> "78" [1]=> "86" } } } でもarray_popを使うとこうなりますよね? array(2) { [0]=> array(2) { ["ids"]=> array(1) { [0]=> "497" } ["scores"]=> array(1) { [1]=> "44" } } [1]=> array(2) { ["ids"]=> array(1) { [0]=> "472" } ["scores"]=> array(1) { [1]=> "86" } } }
daijin

2018/12/09 10:08

array_popを使うと、get_post_metaの対象になるのはそれぞれの配列の最後の494と471だけですよね? 目的は497と494と472と471をget_post_metaの対象にしたいというものなので…
kei344

2018/12/09 10:09

提示されたコードにある「$ids」がそもそも定義されていませんね。
daijin

2018/12/09 10:11

ほんとですね。大変申し訳ございません。ただちに修正しておきます。
daijin

2018/12/09 10:25 編集

追記の整理ありがとうございます。よく他人のやりたいことが推察できますね。笑 いちおう 'ids' => $id, だけ 'ids' => $ids, です。 この'idsには、187と284の親である、497と494と472と471の4つを入れたいので。で、その4つについてget_post_metaしたいというのが考えている流れになります。質問の最後に追記致しました。
daijin

2018/12/09 10:24

親なのに増えてる点は気にしないでください。愛人との子供なんです。笑
daijin

2018/12/09 11:52 編集

あれから考えたんですけど、foreachを2回に分けてくのはどうでしょうか。 まず質問のソースコードはこうして、get_post_metaは削除します。 $array_base = array( 187, 284 ); $array = array(); foreach ( $array_base as $id ) { $ids = get_post_ancestors( $id ); $tmp = [ 'ids' => $ids, ]; array_push($array, $tmp); } ここで$arrayは「187の、494と494」と「284の、472と471」という風に4つのIDが2分割された状態で入っています。 なのでこの2分割されたものを1つにまとめるために、次のようにして2回目のforeachを書くわけです。 この2回目のforeachによって、先の2分割されたものを「494と494と472と471」と1つにまとめ、これらに対してget_post_metaを取得するわけです。 $r=0; for($i = 0 ; $i < count($array); $i++){ foreach ($array[$r]['id'] as $line) { $scores = get_post_meta( $line, 'score', true ); $tmp2 = [ 'scores' => $scores, ]; array_push($array, $tmp2); $r++; } } まぁこのコードはできませんでしたが、出来そうな方法を思いついたのでそのイメージだけお伝えし、何かお気づきの点があれば教えてもらえないかと思いまして。
daijin

2018/12/09 12:13

2回目の追記恐れ入ります。 しかし1回目と同じ誤解があるようで、、 ["ids"]と["scores"]は同じ数にならないといけないのです。 しかし1回目の $scores = get_post_meta( array_pop( $ids ), 'score', true ); では["ids"]の最後にしかget_post_metaされませんから、["ids"]が4つなのに["scores"]は2つになってしまいますし、 そして2回目の $scores = get_post_meta( $ids[ count( $ids ) - 1 ], 'score', true ); でも同じように["ids"]が4つなのに["scores"]は2つになってしまいました。
daijin

2018/12/09 18:00 編集

3回目の追記感謝です。できました。 foreachの中にforeachですか! $ids = get_post_ancestors( $id ); の$idsは配列だから(質問時にそう言えって話)、中でもう一度foreadhさせてあげないといけないんですね。
daijin

2018/12/09 18:00 編集

お手を煩わせてしまい誠に申し訳ございません。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問