PHPで配列の重複削除がうまくいきません。wordpressでサーバーのpostmetaテーブルの、ある特定のmeta_keyのmeta_valueをリスト表示させたいと考えております。下記のコードで

$array = $value->meta_value;
でこの習得した$array配列の中身のリスト表示はできたのですが重複しているものがあるため、さらに重複を削除させるために
$result = array_unique($array);
を追加したのですが、$resultを表示させようとするとなぜかうまく結果が表示されません。
原因はわかりますでしょうか?(array_uniqueはforeachの後に置く?)

↓コードです。
>||
<?php
global $wpdb;
$data = $wpdb->get_results( "
SELECT meta_value
FROM $wpdb->postmeta
WHERE meta_key = '◯◯◯'
" );

foreach ($data as $value) {
$array = $value->meta_value;
$result = array_unique($array);
print_r($result);

}
?>
||<

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2017/07/25 11:20:04

ベストアンサー

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

配列なのは$arrayでなく$dataです。
だからforeachに$dataを渡すのです。

Array
(
    [1] => Array
        (
            [meta_value] => ○
        )
    [2] => Array
        (
            [meta_value] => ×
        )
    [3] => Array
        (
            [meta_value] => △
        )
    ...
)

です。

この場合はget_resultsよりget_colでしょう。
素直な配列になります。
そして配列個々を処理するforeachの前に配列全体を処理するarray_uniqueを使います。


しかし、そもそも重複をなくすためにSELECT DISTINCTを使うのが一番の方法だと思います。

他1件のコメントを見る
id:TransFreeBSD

配列なのは$dataです。
だから$dataに[○]を使います。

表示するだけならわざわざ変数に入れる必要がありません。

echo $data1[$s]->meta_value;
echo $data2[$s]->meta_value;

あと、単なる慣例ですが、forで単に数字を回すときは$iを使います。
加えて、forを使うならforのマニュアルも読みましょう。基本の配列の回しかたもあります。
http://php.net/manual/ja/control-structures.for.php


この場合はget_resultsよりget_colでしょう。
素直な配列になります。
それなら以下で済むと思います。

echo $data1[$i];
echo $data2[$i];

get_resultsを使うならget_resultsのマニュアルも読みましょう。get_colも書いてあります。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class

2017/07/21 19:33:40
id:kajironpu

お忙しい中本当にありがとうございました。

echo $data1[$s]->meta_value;
echo $data2[$s]->meta_value;

こちらの方法で for ($i = 0; $i < **; $i++){ を追加してうまくいきました。

最初なぜか、この出力がうまくいかず、配列にわざわざ入れたりして難儀しておりました。あと、get_colのほうだと、meta_valueを最初から取ってくるやり方になるのですね。つまり、->meta_value がいらないくなるのですね。じっくりget_colのほうを読んでみたいと思います。ありがとうございました。

2017/07/24 12:58:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません