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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Leaflet

Leafletは、Web上で地図を作成するためのJavaScriptライブラリ。人気のあるJavaScript地図ライブラリのうちの一つでオープンソースです。軽量でインタラクティブな地図を手軽に表示することができます。

PHP

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

Q&A

解決済

1回答

2361閲覧

Leafletとphpでcsvファイルを使いマーカー2つ以上表示する

akican1219

総合スコア6

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Leaflet

Leafletは、Web上で地図を作成するためのJavaScriptライブラリ。人気のあるJavaScript地図ライブラリのうちの一つでオープンソースです。軽量でインタラクティブな地図を手軽に表示することができます。

PHP

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

0グッド

0クリップ

投稿2020/02/07 15:01

編集2020/02/08 13:50

お世話になります。

前提・実現したいこと

leafletでcsvデータをを読み込んで位置情報を表示できるようにしたい

発生している問題・エラーメッセージ

csvデータを1行しか読み込めない。

csv

38.248926, 140.327303, 山形駅,
38.255195, 140.328290, 霞城公園,

ソースコード(php)

php

1<?php 2 3$filename = 'sample.csv'; 4 5// ファイルを開く 6$data = file_get_contents($filename); 7 8// 文字コード変換して一時ファイルに書き込む 9$lines = mb_convert_encoding($data, 'utf-8', 'auto'); 10 11// UTF-8のCSVデータを1行ずつ処理する 12foreach ((array)$lines as $line){ 13 // 配列 14 //カンマで分割 15 $data = explode(',',$line); 16 //改行コード置換 17 $popdata = str_replace( "\r\n", "", $data[2]); 18 //Map表示用 19 $mapdata = $mapdata ."L.marker([" .$data[0] ."," .$data[1] ."]).addTo(map).bindPopup(" ."'" .$popdata ."'" .")\n"; 20 21} 22 23?>

お願いします

追記

array(2) { [0]=> string(34) "38.248926, 140.327303, 山形駅, "
[1]=> string(36) "38.255195, 140.328290, 霞城公園," }

php

1<?php 2 3// SJISのCSVファイル 4$filename = 'sample.csv'; 5 6$data = file($filename); 7 8// 文字コード変換して一時ファイルに書き込む 9$lines = from_convert_encoding($data, 'utf-8', 'auto'); 10 11// UTF-8のCSVデータを1行ずつ処理する 12foreach ((array)$lines as $line){ 13 // 配列 14 //カンマで分割 15 $data = explode(',',$line); 16 //改行コード置換 17 $popdata = str_replace( "\r\n", "", $data[2]); 18 //Map表示用 19 $mapdata = $mapdata ."L.marker([" .$data[0] ."," .$data[1] ."]).addTo(map).bindPopup(" ."'" .$popdata ."'" .")\n"; 20 21} 22 23?>

おかげさまで配列にはなったのですが、今度は、以下のエラーが出ました。
Fatal error: Call to undefined function from_convert_encoding() in .php on line 9
お願いします。

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

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

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

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

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

m.ts10806

2020/02/07 20:53

コードはマークダウンのcode機能を利用してご提示ください あと、(array)キャストはどういう意図で入れたのでしょうか。
akican1219

2020/02/08 11:31

ご教授ありがとうございます。 マークダウンのcode機能を使い、直しました。 arrayは、入れないままだと Invalid argument supplied for foreach() inとエラーが出たので調べたところ、foreachは配列とオブジェクトでしか使えないとわかり、arrayを使うと強制的に配列になるから直ると書いてあったので試したところ、エラーが出なくなったので入れました。
guest

回答1

0

ベストアンサー

$lines = mb_convert_encoding($data, 'utf-8', 'auto');

を実行した結果、$lines は、配列になっていますか?

var_dump($lines) 等を実行して確認してみてください。


コードをよく読むと file_get_contents() を使っているので、 $data も配列じゃないですね。

ファイルを読み込んで 1行ずつ配列として代入する file() で読み込むのが良いのではないでしょうか。

file() - PHPマニュアル 参照

投稿2020/02/08 12:56

編集2020/02/08 13:26
CHERRY

総合スコア25218

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

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

akican1219

2020/02/08 13:16

ご教授ありがとうございます。var_dump($lines)を実行した結果なのですが、 string(69) "38.248926, 140.327303, 山形駅,38.255195, 140.328290, 霞城公園," と出ました。 これは配列になっていないですよね...?直し方わかればご教授お願いします。
CHERRY

2020/02/08 13:24

追記しました。 おそらく、file_get_contents() で、$data に読み込んだ時点で、string になっていると思います。
akican1219

2020/02/08 13:52

配列になりました。ありがとうございます。 ただ、別のエラーが出てしまい、詰まっています。わかればお願いします。 追記に記載しました
CHERRY

2020/02/08 14:00 編集

最初のコードでは、mb_convert_encoding だった部分が、 from_convert_encoding に変わっていますが、何故でしょうか?
akican1219

2020/02/08 14:09

あ、すみません、試してそのままにしてました。 mb_convert_encodingにしたのですが、mb_convert_encoding() expects parameter 1 to be string と帰ってきました。 なんども申し訳ありません。ご教授お願いします。
akican1219

2020/02/08 23:33

できました!何回もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問