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

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

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

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

Q&A

解決済

1回答

1130閲覧

PHPで、[{"age":20,"name":"太郎"}] を [["age"=>20,"name"=>"太郎"]] に変換

ringorin

総合スコア40

PHP

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

0グッド

0クリップ

投稿2019/09/25 23:02

お世話になります。PHPである値を配列へと変換したいと思っています。

文末の質問の経緯にあるように、できればWordpressにお詳しい方にお尋ねできましたら幸いです。

どうぞ宜しくお願い致します。

###実現したいこと
次のように値を変換したいです。

【現状の値】[{"age":20,"name":"太郎"}]
【目的の値】[["age"=>20,"name"=>"太郎"]]

###試したこと
そもそも【現状の値】がどのような形式かわからず、めっちゃめちゃ調べて、オブジェクト❓なるものではないかと思いました。

そこでオブジェクトを配列に変換すべく下記object_to_array()を通したのですが、【現状の値】に変化はなく、質問させて頂きました。

php

1function object_to_array($mixed){ 2 if(is_object($mixed)){ 3 $mixed=(array)$mixed; 4 } 5 6 if(is_array($mixed)){ 7 $new=array(); 8 foreach($mixed as $key=>$val){ 9 $key=preg_replace("/^\0(.*)\0/","",$key); 10 $new[$key]=object_to_array($val); 11 } 12 }else{ 13 $new=$mixed; 14 } 15 16 return $new; 17} 18 19$obj = '[{"age":20,"name":"太郎"}]'; // 【現状の値】を関数にかける 20var_dump( object_to_array($obj) ); // 【現状の値】のまま変化なし 21

###質問の経緯
なお【現状の値】は、Wordpressのprofile_updateのフック内で、次のようにerror_log()で確認される$testの値になります。

ここでupdate_user_meta()に【目的の値】を送信したいので、$testの変換方法を質問させて頂いた。というのが質問の経緯になります。

php

1add_action( 'profile_update', 'save_profile_fields' ); 2function save_profile_fields( $user_id ) { 3 4 $cf_key_arr = ['user_meta_test']; 5 foreach( $cf_key_arr as $cf_key ){ 6 7 $init = json_encode( $_POST[$cf_key], JSON_UNESCAPED_UNICODE ); 8 error_log( '$_POST[$cf_key] - $init :' . json_encode( $init, JSON_UNESCAPED_UNICODE ) ); 9 10 $test = stripslashes( $_POST[$cf_key] ); 11 error_log( '$_POST[$cf_key] - $test :' . $test ); 12 13 /* 14 error_logの結果 15 $_POST[$cf_key] - $init :"\"[{\\\\"age\\\\":20,\\\\"name\\\\":\\\\"太郎\\\\"}]\"" 16 $_POST[$cf_key] - $test :[{"age":20,"name":"太郎"}] 17 */ 18 19 // ここで【目的の値】を送信したいので、上の $test を変換する方法を質問させて頂きました 20 update_user_meta( $user_id, $cf_key, 【目的の値】 ); 21 } 22}

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

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

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

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

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

yambejp

2019/09/26 00:27

「[{"age":20,"name":"太郎"}]」という文字列を 「[["age"=>20,"name"=>"太郎"]]」という文字列に変換するのでしょか? それとも配列に変換すればいいのでしょうか?
ringorin

2019/09/26 02:01

失礼しました。配列に変換したかったので、maisumakunさんの方法でできました。
guest

回答1

0

ベストアンサー

【現状の値】は単なる文字列なので、is_objectでもis_arrayでも判定はfalseです。

この値はJSON形式ですので、json_decodeで変換しましょう。

投稿2019/09/25 23:09

maisumakun

総合スコア145184

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

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

ringorin

2019/09/26 04:05

知りませんでした。いつもご親切にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問