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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2394閲覧

配列の括弧変換について {} → []

cob0822

総合スコア20

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/05/23 14:32

編集2019/05/23 15:05

こんばんは。

配列形式の括弧の変換{}→[]方法について質問させてください。

開発環境はLaravel/PHPです。

コントローラで以下のような配列形式のデータ$markerDataを用意し、Viewに渡しています。

$markerData = $points->map(function($point) { return [ 'name' => "test", 'lat' => $point->latitude, 'lng' => $point->longitude, ]; });

$markerDataをView側で受け取った際に、以下のように中括弧{}形式の配列になっているのですが、
View側ではJavascriptコード内で大括弧[]形式の配列として扱いたいため、(※)期待値の形に変換したいです。

0: {name: "test", lat: "35", lng: "139"} 1: {name: "test", lat: "26", lng: "127"}

(※)期待値

0: [name: "test", lat: "35", lng: "139"] 1: [name: "test", lat: "26", lng: "127"]

オプションとしては、①View側で大括弧に変換する方法②コントローラ側を修正して大括弧形式でViewに渡す方法
があるかと思うのですが、対応方法をご存知の方がいらっしゃいましたら、ご教示いただけないでしょうか。

よろしくお願いいたします。

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

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

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

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

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

miyabi_takatsuk

2019/05/23 14:42

あれ、phpって、通常インデックス配列も、辞書型も、{}が最終形ですよね? インデックスの配列定義しても、 $arr = array(); $arr[] = "aaa"; $arr[] = 25; $arr[] = "bbb"; var_dump($arr); >>> {0: "aaa", 1: 25, 2: "bbb"} ってなりますよね? 確か、インデックス配列も辞書型も区別あまりない言語だったような・・・。 間違ってたらすみません。
cob0822

2019/05/23 14:53

質問をご覧いただきありがとうございます。 すみません。情報が不足していました。 ViewファイルにはJavascriptのコードを記述しており、$markerDataはJSのコード内で 取得、利用する想定です。 JSの配列は、[]が最終形、という認識です。 初心者なので、間違っていたら申し訳ないです。
miyabi_takatsuk

2019/05/23 14:55

なるほど、JSの配列として処理渡したいのですね。 では、質問本文は編集できるので、その旨記載してください。
cob0822

2019/05/23 15:07 編集

回答いただきありがとうございました。 本文を修正いたしました。
miyabi_takatsuk

2019/05/23 15:07

質問修正いただきありがとうございます。 回答を修正させていただきましたので、ご覧ください。
guest

回答1

0

ベストアンサー

質問の修正コメントを受け、回答を修正いたします。
JSに配列として処理を渡す際に、意図する形式にしたい、とのことで回答させていただきます。

結論を述べますと、その形式ではJavaScriptでは、大括弧にはなりません。
JavaScriptにおいて大括弧になる形式は、純粋なインデックス配列のみです。
["aaa", 25, "bbb"]のような、形式です。
本質問にあるような、他の言語でいう辞書型形式は、JabaScriptにおいては、オブジェクト型となり、中括弧でしか扱えません。
これは仕様になりますので、如何様に変換しようとしても、不可能です。

--------- 以下元回答 --------
PHP: 配列 - Manual
これご覧ください。
{}であっても、phpの場合、配列は配列です。
定義時には[]使ったりしますが、
最終的には、{}で囲われた形になります。
ですが、他の言語での、インデックス配列としても使えますし、
他の言語でいう連想配列としても扱えます。
なので、どう定義しようが、配列は、
{}で囲われた形になるのは、PHPの仕様です。

投稿2019/05/23 14:51

編集2019/05/23 15:03
miyabi_takatsuk

総合スコア9528

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

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

cob0822

2019/05/23 15:12

丁寧にご回答いただきありがとうございます。 大変参考になりました。 すぐに解消とはいかないようですが、Javascriptの仕様と書き方についてもう少し確認し、 動作確認してみます。
miyabi_takatsuk

2019/05/23 15:15 編集

もしかして、 [ {name: "test", lat: "35", lng: "139"}, {name: "test", lat: "26", lng: "127"} ] ってことですか? これなら、インデックス配列の中にオブジェクトが入ってるという状態なので、一応外側は大括弧になりますが。 JavaScriptでもこれなら形式として可能です。
cob0822

2019/05/23 15:26

用途としては、for文の中で markerData[i]['lat'] や markerData[i]['name'] の形で 特定のインデックスの要素が取り出せればよいのですが。。 JSで上記のように取り出すには、以下の形式にする必要があるものと思っています。 そもそもこの前提が間違っていますでしょうか? ``` 0: [name: "test", lat: "35", lng: "139"] 1: [name: "test", lat: "26", lng: "127"] ```
mikkame

2019/05/23 15:27

そもそも [name: "test", lat: "26", lng: "127"] だとJSで解釈できない件ですね
hentaiman

2019/05/23 15:29

>{}で囲われた形になるのは、PHPの仕様です。 勉強になります。
miyabi_takatsuk

2019/05/23 15:34 編集

cob0822さん> ああ、なるほど。 JavaScriptの勉強を深められるといいですよ。 var obj = {name: "let"}; という時、 obj["name"]ってやって"let"を取得できるので、 全く問題なく今のままで markerData[i]['lat']でそのまま要素取り出せますよ。 JavaScript、そこらへんややこしいですよね。
miyabi_takatsuk

2019/05/23 15:31

hetaimanさん>私も改めて見て勉強になりました。
cob0822

2019/05/23 15:40

回答ありがとうございます。 Javascriptがわからない状態なので、これから勉強していきます。 よろしければ追加でご教示いただきたいのですが、 開発者ツールで以下のように表示される場合、 Array(32) 0: {name: "test", lat: "35", lng: "139"} 1: {name: "test", lat: "26", lng: "127"} 実際は以下のような形になっているのでしょうか。 array[  {name: "test", lat: "35", lng: "139"},  {name: "test", lat: "26", lng: "127"} ] また、この場合インデックス[0]のname要素は markerData[0]["name"]で取り出せるという理解で あっていますか?
miyabi_takatsuk

2019/05/23 15:44 編集

はい、その通りです。それで合っております。 ブラウザの検証ツールのコンソールは、今回のように、実際の識別子と表記が違い、わかりずらかったりしますが、そこは慣れるしかないかと思います。
cob0822

2019/05/23 15:48

実際にコードも動かして確認しましたが、無事に値が取り出せていました。 回答いただきありがとうございました。大変参考になりました。
miyabi_takatsuk

2019/05/23 15:51

おお、よかったですね! Webの世界は今回のようにいくつもの言語跨ぐことがほとんどで、混乱することが多いかと思いますが、あきらめず、まず、動かしてみて、考えるようにしましょう。 考える前に動かしてエラー出た時に考えることも、プログラムの世界では大事になると思いますよ。
cob0822

2019/05/23 15:57

今回は回答に甘えてしまいましたが、自分で考える姿勢も大事ですよね。精進します。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問