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

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

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

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

Q&A

解決済

1回答

1266閲覧

PHPのendはなぜexplodeを渡せないのか?

nikuatsu

総合スコア177

PHP

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

0グッド

0クリップ

投稿2022/12/14 14:22

質問

配列のendで以下パターンBができないのはなぜですか?

php

1<?php 2//パターンA 3$str = 'a,b'; 4$tmp = explode(',',$str); 5$end = end($tmp); 6echo $end;

php

1<?php 2//パターンB 3$str = 'a,b'; 4$end = end(explode(',',$str)); 5echo $end;

試したこと

だって、上のそれぞれのendの中身を下記のように比較したらtrueですよね?

php

1<?php 2$str = 'a,b'; 3$tmp = explode(',',$str); 4$a = $tmp; //パターンAの中身 5$b = explode(',',$str); //パターンBの中身 6var_dump( $a === $b ); //true

ならendの中身は同じ値ということですよね?
ではなぜパターンBはできないのですか??

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

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

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

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

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

melian

2022/12/14 14:54

まぁ、できなくはないのですが、 $end = @end(explode(',',$str)); これは Bad Practice なので、、 $end = array_slice(explode(',', $str), -1)[0]; とでもしてみてはどうでしょうか。
guest

回答1

0

ベストアンサー

endの中身は同じ値ということですよね?

値の問題ではありません。理由はPHPマニュアルに明記されています。

ここには配列そのものを渡さなければならず、 配列を返す関数を指定することはできません。 参照渡しできるのは、実際の変数だけだからです。

投稿2022/12/14 14:24

maisumakun

総合スコア146603

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

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

nikuatsu

2022/12/14 14:48

ありがとうございます。知りませんでした。そんな関数があったのですか…。 end以外にもそういった関数はあるのでしょうか?
m.ts10806

2022/12/14 17:08 編集

どんな言語やフレームワークのどんな熟練者であっても全ての機能の全ての仕様が瞬時に出てくるわけではなく(記憶しているわけではなく)、 teratailの回答をしているユーザも例外ではないです。 起きている現象からPHPマニュアルのような公式ドキュメントでで仕様を確認し、検証・考察して回答にしているはずです。 (言語やフレームワーク自体の開発者でもおそらく完全に覚えているわけではないはず。  参考:https://teratail.com/questions/139165  「情報層のものを知っているわけではなく、情報への辿り着き方を知っている」だけ。 ) 例えある程度覚えていたとしても根拠なき発言は「私見」「推測」となって信用性に欠け避けるべきなので、PHPマニュアルの確認はしたうえで、今回のmaisumakunさんの回答のようにリンクと該当箇所の引用は必至です。 つまりnikuatsuさんのその追加質問は「PHPマニュアルを全て確認して列挙せよ」と言っているのと同じことになりますのでご注意を。 そもそもが「できないのはなぜか」「試したこと」があるだけで「起きている現象」「調べたこと」が質問に書かれていないので、どこまで確認された上での質問か分からないですが、 実行したときにでるエラーメッセージの通りなので、やはり「適宜PHPマニュアルで機能の仕様を確認しよう」が言えることになると思います。 https://paiza.io/projects/2o8AcZNONPH0KCgIPz5Zeg >PHP Notice: Only variables should be passed by reference つまり、「エラーメッセージを確認してPHPで機能確認する(内容を理解する)」だけで多くの疑問は出てこないということになります。 エラーメッセージの指摘内容が理解できなかったり、PHPマニュアルの内容が読み解けないケースもあるでしょうけど、その場合は「調べたり考えた内容で理解できてない部分」を質問すべき。今回の質問はコードで検証しただけで「仕様の確認」が抜けています。 (PHPマニュアルをきちんと確認する癖をつけるだけで「へーそういうことか」で済むことも非常に多いですよ)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問