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

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

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

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

Q&A

解決済

3回答

562閲覧

PHPでvar_dumpの結果をテキストと比較したい

ikemen

総合スコア3

PHP

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

0グッド

1クリップ

投稿2020/08/14 06:29

$arrayと$strを変えることなく、$is_matchをtrueにできませんでしょうか?

ある場面で$strとして確定したものがあるのですが、それが$arrayのvar_dumpであることを示したいと思っています

はじめから$strを別の形で出力しておけばと思いますが、とりあえず変えずにできれば知りたいです

php

1// 変えない 2$array = array('key'=>'value'); 3 4// 変えない 5$str = 'array(1) { 6 ["key"]=> 7 string(5) "value" 8}'; 9 10// 変えてもいい 11$dump = var_dump($array); 12 13// $strとして確定したものが、$arrayのvar_dumpであることを示したい 14$is_match = $str === $dump; 15var_dump( $is_match );

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/08/14 07:19

var_dump()の出力結果を変数に投入するのは、自分でPHPコードを書いて持たせるのですか?
ikemen

2020/08/14 07:28

どういうことですか?自分で書く以外にできれば知りたいです
guest

回答3

0

var_dump()が、絶対条件であれば、** できません**。

$dump = var_dump($array);

は、var_dump - PHPマニュアル

返り値
値を返しません。

とあるように var_dump()は、画面出力だけでプログラムに値を返しませんので、 $dump は、null になるのではないかと思います。

var_dump()の結果を比較したいということであれば、画面に出力して目視で判断するしか方法は無いと思います。

投稿2020/08/14 08:14

CHERRY

総合スコア25171

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

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

ikemen

2020/08/14 08:42

わたしも無理めと思い質問したのですけど、バッファでできました すごい人がいますねteratail、最高!
guest

0

var_export()を使うとか?
PHP: var_export - Manual
var_dump()の出力は(型名やサイズなど)あくまでデバッグ的情報が付帯して、
そのままPHPコード中に展開することは文法エラーを引き起こします。
var_export()を使えば、PHPコード中に展開しても文法エラーを起こしません。

あるいは、複雑なデータ構造すら文字列化するためには、
PHP: serialize - Manual
でしょうか。

var_dump()による出力は直に変数に持たせることができず直接webブラウザに出力されるので、
質問文中に書いてあるような変数への代入はできません
PHP: var_dump - Manual

その出力を敢えて変数に持たせることの重要性がとくになければ、
例えばserialize()したあとの文字列を事前事後と比較すれば、
内容の一致を確認できるかと。

どう使うかは、それぞれのページのサンプルコードをご確認ください。

投稿2020/08/14 07:07

編集2020/08/14 07:36
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ikemen

2020/08/14 07:11

あのすみませんけど、どこでどのように使うのでしょうか? 「$strとして確定したものが、$arrayのvar_dumpであることを示したい」んですけど、そこはだいじょぶですか?
退会済みユーザー

退会済みユーザー

2020/08/14 07:15

何をやりたいのか、いまいちピンときませんが、 変数や配列やクラスなどをvar_export()した文字列を、 そのままPHPコード中に記述することができることをお伝えしたかったです。 あくまでvar_dump()の出力はデバッグ的な情報がついているせいで、 PHPコード中に展開することはできませんので、 変数などに再度再現するならvar_dump()よりもvar_export()がふさわしい、という主旨です。
ikemen

2020/08/14 07:23

ほんとはじめからexportで出しておけばよかったんですけどね~ 今回はある人にvar_dumpで見せたデータ($str)がすでにあり、それを「ほら、$strは$arrayと同じですよね?」と見せる必要があるんですよね
ikemen

2020/08/14 07:25

シリアライズもありですよね そういうのは「>はじめから$strを別の形で出力しておけばと思いますが」と書いた通りで、もう、ほんと、仰る通りなんですけどね~
退会済みユーザー

退会済みユーザー

2020/08/14 07:30

webブラウザへ出力されたデバッグ情報を、もう一度phpコードに戻す「ひと手間」を敢えてかける必要性がピンときません。 書いたコード一つで完結せず、var_dump()したテキストをコピーして、 例えばヒアドキュメント構文など使って別途phpコードに持たせるのって、なんだか面倒だし野暮ったい。 なにか、phpコードの学習コンテンツでも作っておられるのでしょうか?
ikemen

2020/08/14 07:32

phpコードの学習コンテンツ、まぁ近いですね 今回はある人にvar_dumpで見せたデータ($str)がすでにあり、それを「ほら、$strは$arrayと同じですよね?」と見せる必要があるんですよね だから$strは確定です、変えないでくださいw
退会済みユーザー

退会済みユーザー

2020/08/14 07:42

var_dump() は値を返しません。変数に代入するようなコードを書いても、変数には入ってきません。 そのため、var_dump()の出力をどうやってphpコードに戻すのか、不明瞭な仕様のため混乱しています。
退会済みユーザー

退会済みユーザー

2020/08/14 07:44

変数が保持する内容を、phpコード内に再度展開するためには、var_dump()の出力結果は再加工する必要があり煩わしいため、 var_export()するか、serialize()/unserialize()するのが実現性の高いやり方になります。 私の回答は、あくまで代替案の提示です。
ikemen

2020/08/14 07:51

今回はある人にvar_dumpで見せたデータ($str)がすでにあり、それを「ほら、$strは$arrayと同じですよね?」と見せる必要があるんですよね 質問に「>はじめから$strを別の形で出力しておけばと思いますが」と書いた通りで、$strの出力方法に代替はできません $strは確定ですw
退会済みユーザー

退会済みユーザー

2020/08/14 07:57

私の示す代替案は採用できない、ということはわかりました。 では、そもそもどうやって実現するつもりだったのでしょうか。 できるかどうかわからないやり方を模索して実現しようとしていて、私が「それできませんね」ってお伝えしている状況なので、 もう一度段取りというか、誰(phpのコードを書く人 or webブラウザでアクセスする人)が何をやるのか、に着目して丁寧に説明いただきたいです。質問文中に。 そして、私はこれで回答を区切ります。
ikemen

2020/08/14 08:05

よかったです!どうもでした!
guest

0

ベストアンサー

本来は print_r($array, true) などで解決できるはずですが、比較対象の出力文字列が var_dump での出力になっているから var_dump() の出力を取得したい、ということですよね。

var_dump() は返り値を持たないの(標準出力に直接出力する)関数ですので、var_dump() そのものの出力を取得したいということであれば、出力バッファリングを利用する必要があるかと思います。

PHP

1ob_start(); 2var_dump($array); 3$dump = rtirm(ob_get_contents()); 4ob_end_clean();

ただし、既に出力バッファリングを利用している場合でそれ以前に出力がある場合はこの処理をする前に

  • 既存のバッファを取得
  • バッファをクリア

し、処理後にバッファに戻す必要があるかと思います。


PHP

1// 変えない 2$array = array('key'=>'value'); 3 4// 変えない 5$str = 'array(1) { 6 ["key"]=> 7 string(5) "value" 8}'; 9 10// 変えてもいい 11// $dump = var_dump($array); 12 13ob_start(); 14var_dump($array); 15$dump = rtrim(ob_get_contents()); 16ob_end_clean(); 17 18// $strとして確定したものが、$arrayのvar_dumpであることを示したい 19$is_match = ($str === $dump); 20var_dump( $is_match );

投稿2020/08/14 08:06

編集2020/08/14 08:27
kaz.Suenaga

総合スコア2037

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

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

ikemen

2020/08/14 08:17

ああなるほど!バッファの中でダンプして、そのob_get_contents()を代入ですか!思いつきませんでした~ あれ、しかしこちら↓かと思ったのですが、何か違いますか? できると思ったのですが、falseになってしまいました… <?php // 変えない $array = array('key'=>'value'); // 変えない $str = 'array(1) { ["key"]=> string(5) "value" }'; // 変えてもいい // $dump = var_dump($array); // 出力バッファリングを利用 ob_start(); var_dump($array); $dump = ob_get_contents(); $is_match = $str === $dump; ob_end_clean(); // $strとして確定したものが、$arrayのvar_dumpであることを示したい var_dump( $is_match );
kaz.Suenaga

2020/08/14 08:19

今回答を修正しましたが、出力バッファの最後に改行があるため $str (改行で終わらない)と比較すると改行分違いがある状態でした。 比較の時点でそういった差異を吸収するなりやりようはいろいろありますがとりあえず出力バッファの最後の改行(以外もごみになるものいろいろ)を `rtrim()` で削除したものと比較することでクリアできるかと思います。
ikemen

2020/08/14 08:33

私も改行を見つけまして、rtrimつけたり、逆に$strに改行をつけたり(これはルール違反ですが試しに)をしてみたのですが、やはりfalseのようでした てごわし… ob_end_clean();の後にvar_dump($dump);したら、目視ではどう見ても$strと同じなんですけどね
ikemen

2020/08/14 08:35

いえ、できてました!環境が特殊だったせいで、普通にやったら大丈夫でした ありがとうございましたー!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問