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

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

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

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

配列

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

Q&A

解決済

2回答

3134閲覧

CakephpでCSVファイルから情報をインポートして、DBから取得した情報と一致しているか判定したい

cocytus

総合スコア12

CSV

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

配列

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

0グッド

0クリップ

投稿2016/09/04 11:53

###前提・実現したいこと
PHP初心者です。

CakephpでCSVファイルの情報をインポートして変数に代入。
DBの情報を取得し、インポートしたCSVファイルの情報と1つずつ一致しているか判定する処理を行う。

###発生している問題
CSVファイルの情報
A0001,A0002,A0003,A0004,A0005

DBの情報([id]=>[no])
A0001=>B1
A0002=>B2
A0003=>B3
A0004=>B4
A0005=>B5

どちらの情報もログを見る限りでは取得できている。

これらを一つずつ一致しているかどうか判定したい。

###該当のソースコード

php

1/*CSVファイルのid情報*/ 2$csv_id 3 4/*DBの情報 find('all')で取得*/ 5$db_info 6 7foreach($db_info as $value){ 8 if(ここで一致しているか処理したい){ 9 }else{ 10 } 11}

###試したこと

php

1foreach($db_info as $value){ 2 if($value[ModelName][id] == $csv_id){ 3 }else{ 4 } 5} 6 7配列にして、in_arrayなども試しました。 8どうもうまくいかずに困っています。

###補足情報(言語/FW/ツール等のバージョンなど)

xampp環境を使用しています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

次のような手順になります。
詳細は下記にコメントとして書いているので、そちらを参照してください。

PHP

1// 1. CSVファイルのデータを1つずつ配列に入れる 2$csv_arr = ['A0001','A0002','A0003','A0004','A0005']; 3 4// 2. DBからデータを取得 5$db_data = データベースから取得 6 7// 3. DBから取得したデータを1つずつ取り出し、$csv_arrの値に存在するものがあるかチェック 8foreach ($db_data as $key => $value) { // $keyにid、$valueにnoが入っている 9 if (array_search($key, $csv_arr) !== FALSE) { 10 // DBのレコードがCSVファイルに存在する場合(一致する場合) 11 } else { 12 // 存在しない場合(一致しない場合) 13 } 14}

投稿2016/09/05 00:41

編集2016/09/05 01:12
dangao

総合スコア37

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

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

退会済みユーザー

退会済みユーザー

2016/09/05 00:55 編集

if (array_search($key, $csv_arr)) { ではなく if (array_search($key, $csv_arr) !== FALSE ) { にすべきじゃないかな? A0001 は FALSE 扱い (key=0)
dangao

2016/09/05 01:11

その通りですね!コメントありがとうございます。修正します。
guest

0

一つずつチェックする必要がありますか?
CSVの中の値がすべてDBに入っているかを確認出来ればOKと言う事であれば

PHP

1$csv_arr = ['A0001','A0002','A0003','A0004','A0005']; 2if(!empty(array_diff($csv_array, Hash::extract($db_info, 'n.id'))) { 3 //DBにないデータが$csv_arrayに入ってる 4}

こんな感じで一括でチェックできると思いますが。

投稿2016/09/05 01:25

kunai

総合スコア5405

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問