データの受け渡しについて - PHPプロ!Q&A掲示板

4936

  • 募集中!! 0P

データの受け渡しについて

質問日時 / 2018年4月10日 20:53    回答数 / 2件

Questioner:  zwq07216  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

他のシステム会社で作成されたシステムの検証作業をしています。
$projects[]をvar_dumpでみるとNullと表示されます($projectはデータが参照できる)
まだphp初めて3日なのでネットを検索してみましたが記述に問題あるかわかりませんでした。
すいませんが構文が正しいか教えて下さい。


if ($login->isUserLoggedIn() == true) {
    if($_SESSION['user_auth'] == 2) {
        $db = new MysqliDb(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        $data = $db->get('projects');
$workers = $db->where('worker_id', $_SESSION['user_id'])->get('worker_projects');
        foreach($workers['project_id'] as $worker_pid) {
            foreach($data as $project) {
                if($project['project_id'] == $worker_pid) {
                    $projects[] = $project;   ← $projects[]がnull状態
                }
            }
        }
    } elseif($_SESSION['user_auth'] == 3) {
        $db = new MysqliDb(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        $projects = $db->where('building_id', $_SESSION['user_id'])->get('projects');
    }
?>


ツリー一覧

┗A01shimix>構文が正しいか教えて下さい。 提示されているソ
 ┗A01-1zwq07216回答ありがとうございます。 $projects[]の説明ありが

回答一覧

並び替え:

A01
answerershimix [4月11日 09:22]

>構文が正しいか教えて下さい。

提示されているソースの範囲では、最初の if の { に対応する } がありません。

それ以外の部分に関しては(標準では存在していない)MySQLiDBクラスの定義がないので何とも言えません。


閑話休題

>$projects[]をvar_dumpでみると

var_dump($projects[]) は Fatal error(Cannot use [] for reading)になるハズです(手元の7.2.0ではそうなります)。$projects[]という記述は配列$projectsに要素を追加するための記述ですので書き込み専用になっています。

phpのバージョンはいくつでしょうか。Fatal error にならずに単に null を返すバージョンがあったかな・・・。
一応マニュアルによれば
---------- 引用ここから
     配列に定義されていないキーへアクセスしたときの挙動は、 未定義の変数にアクセスしたときと同じです。 E_NOTICE メッセージが発行され、 返される結果は NULL となります。
    配列で文字列以外のスカラー値をデリファレンスした場合は、 返される結果は NULL となります。 何もエラーは発生しません。 
---------- 引用ここまで
とはなっていますが、Fatal error のレベルですからねぇ(汗

この意見に回答する

ツリーへ TOPへ

A01-1
replyerzwq07216 [4月11日 17:53]

回答ありがとうございます。
$projects[]の説明ありがとうございます。
意味が理解できたので問題調査の材料となりました。

問題個所はforeachと直前のif文が間違っていましたので解決できました。
ありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)