laravelでin_array関数を使用する方法

このQ&Aのポイント
  • laravelでcsvファイルから配列を読み込み、view側で条件に当てはまるレコードを表示する方法について説明します。
  • 次のソースコードは、laravelでin_array関数のような機能を実現する方法を示しています。
  • 検索対象の日付が配列内に存在する場合は表示し、存在しない場合は非表示にします。
回答を見る
  • ベストアンサー

laravel でin_array関数使える?

csvファイルから配列を読み込み view側で条件に当てはまるレコードを 表示させたいと思っています。 下記の通りのcsvファイルとbalde.php Contorllerを用意してcsvの中身を表示させるところまでは 上手くいったのですがphpのin_array関数のようなものを 使って実現出来ないでしょうか? (実現したいこと) ある日付{{\Carbon\Carbon::now()->format("Y/m/d")}}が配列の中に存在すれば表示、存在しなければ 非表示 ↓ソースコード (SampleController.php) <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class SampleController extends Controller { public function csvSample() { $file = new \SplFileObject(storage_path('app/csv_sample_utf8.csv')); $file->setFlags( \SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY | \SplFileObject::DROP_NEW_LINE ); $lines = []; foreach($file as $line) { $lines[] = $line; } $file = null; $vars = [ 'title' => 'CSV読み込みサンプル', 'lines' => $lines, ]; return view('samples.csv_sample', $vars); } } (csv_sample.blade.php) <h1>{{ $title }}</h1> {{\Carbon\Carbon::now()->format("Y/m/d")}} @foreach($lines as $line) <p>{{ $line[0] }}, {{ $line[1] }}</p> @endforeach (csv_sample_utf8.csv) 2022/1/17,Xデー 2022/5/3,憲法記念日 2022/5/4,みどりの日 2022/5/5,こどもの日 (web.php) <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; use App\Http\Controllers\SampleController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('/user',[UserController::class,'index']); Route::get('/csv_sample', [SampleController::class,'csvSample']);

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

というかPHPのフレームワークとしてのlaravelなので、 PHPとしての命令ならどんなPHP命令も使えますよ。 https://www.php.net/manual/ja/function.in-array.php 今回、使用したいin_arrayですが、 (PHP 4, PHP 5, PHP 7, PHP 8) で使用可能とあり、 回答としては「ないわけがないよね!」 ってレベルです。

関連するQ&A

  • array_spliceでの置き換えについて

    リファラでカウントカウントを図りたいと考えています。 内容としては、http://www.hoge.net/からのアクセスに対して 『hoge』だけと抽出し、格納しているCSVと照合し正ならカウント+1として「array_splice」で置き換えてる 単純なプログラムなのですが書き込まれるCSVに何故か空の行が下記のように挿入されてしまいます。 CSVの中身 --------------------------------------------- 0,http://www.sample.net 0,http://www.hoge.net 0,http://www.test.net 0,http://www.xxxx.net ↓↓↓↓↓↓↓↓↓↓↓ 0,http://www.sample.net 1,http://www.hoge.net [空白] 0,http://www.test.net 0,http://www.xxxx.net --------------------------------------------- また、アクセスする度に空白行が増えていく状況です。 別のプログラムでも「array_splice」は使っていますが いずれも正常に置き換えられています。 ソースを記述しますので何が原因なのかわかりません。 何方かアドバイスを頂ければと思います。 ソース --------------------------------------------- $string = $_SERVER['HTTP_REFERER']; $regex = "(http:\/\/)([^\/]+)(\/.*$)?"; match ( $string, $regex ); function match ( $string, $regex ) { if ( preg_match ( "/".$regex."/i", $string, $match ) ) { $keyURL=$match[2]; $Data=file("../csv/sample.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if(ereg("$keyURL",$line[1])){ $count="$line[0]" + 1; $lines=array($count,$line[1]); $lines=implode(",",$lines); $lines=$lines."\n"; array_splice($Data,$i,1,$lines); $fp=fopen("../csv/sample.csv","w+"); flock($fp, LOCK_EX); foreach($Data as $item)fputs($fp,$item); fclose($fp); } } } } --------------------------------------------- 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 「Laravel」上で自作コントローラが動かない

    続けての質問、申し訳ありません。 さくらレンタルサーバーにて「Laravel」を試しています。 「Laravel」を単純にサーバーにアップロードし、「http://○○.sakura.ne.jp/laravel/public/」にアクセスすると、Laravelのトップページにアクセスできるところまで確認しました。 次のステップとして、簡単なコントローラを作成してアクセスしたのですが、エラーになってしまいます。 -- 1.application/controllers に 以下の内容で「hello.php」を作成し、アップしました。 <?php class Hello_Controller extends Base_Controller{ public function action_index(){ echo "Hello World!"; } } 2.application 直下に存在する「routes.php」に以下の内容を追加し、アップしました。 Route::controller(array('hello','index')); -- これで、通常であれば「Hello World!」と画面に表示されるはずなのですが・・・ 添付画像のように404エラーが発生します。 通常、404エラーが表示される場合、Laravelのフレームワークにのっとった?エラー画面が表示されると思うのですが、IEのエラーになります。 また、同時に別サーバーのロリポップでも確認してまして、こちらは正常に「Hello World!」と表示されます。 ちなみに、さくらサーバーにて、routes.phpに直接 Route::get('/',function(){   echo 'Hello World!'; }); と書き込んだ場合は、問題なく表示されることを確認しております。 いったい何が悪いのかが検討もつきません。。 何度も申し訳ありませんが、ご教授、お願い致します。

    • ベストアンサー
    • PHP
  • フレームワークは、相対パスではうまくいかないのでし

    https://okwave.jp/qa/q9374798.html の続き >>> <!doctype html> <html> <head> <title>Sample</title> <style> body { color:gray; } h1 { font-size:18pt; font-weight:bold; } </style> </head> <body> <?php $message = 'dai'; $array = ['dai' => 'debu', 'dai2' => 'debu22']; echo($array['dai2']); ?> <h1>Sample</h1> <p><?php echo $message; ?></p> </body> <?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('/hello', function () { return '<html><body><h1>Hello World</h1><p>this is sample page.</p></body></html>'; }); Route::get('helo', function () { return view('helo',['message' => 'Hello!']); }); ありがとうございます。上記のようにしたところうまくいったようです。 /を外すと確かにうまくいったのですが、なぜフレームワークは、相対パスではうまくいかないのでしょうか? Route::get('/hello', function () { return '<html><body><h1>Hello World</h1><p>this is sample page.</p></body></html>'; }); には/があるのにうまくいくことも混乱する原因です。 パスが通っているのでファイル名だけで実行できるのでしょうか? どこをカレントディレクトリとして考えているのかも謎ですね。 また、5.5の説明サイトが見つからずに困っていたので、ありがとうございます。 意訳のようなので、若干日本語がおかしいですが、恐らく5.5の情報は、このようなサイトしかないのでしょうね。 http://ysktec.com/shiguregaki/blog/?p=1088 こちらは5.3移行という事で更新も2017年に行っているようなのでディレクトリ構成も5.5対応かと思ったのですが、こちらの情報も古くて使えないのですかね。

    • ベストアンサー
    • PHP
  • perlで大容量CSVのsort方法について

    perlで大容量CSVのsort方法について perlでcsvファイル100MB超のファイルをソートしたいと思ってますが、以下の方法でメモリーの関係上(と思ってます。)できません。 ソートを行う方法がありますでしょうか? 件数も11万件あるので、エクセルでソートしてからの受け渡しが出来ずに悩んでます。 (ここから) #sortロジック sub sort { use warnings; use feature ':5.10'; open my $ifh, '<', $inport or &error("Can't open $inport"); my @lines = <$ifh>; close $ifh; print @lines, "\n"; #csvファイル何番目? my @sorted = map { $_->[0] } sort { $b->[0] <=> $a->[0]} map { [(split q{,}, $_)[0], $_] } @lines; @lines = @sorted; exit; } (ここまで) いつも貴重なアドバイスをありがとうございます。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 任意の行を修正し、ファイルを上書きしたいのですが…

    <html> <head> <title>修正・変更</title> </head> <body> <?php  $aaa = $_POST['aaa'];  $bbb = $_POST['bbb'];  $ccc = $_POST['ccc'];  $dummy = $_POST['hidden'];  $lines = array($aaa, $bbb, $ccc,$dummy);  $lines = implode(",", $lines);  $lines = mb_convert_encoding($lines, "SHIFT-JIS" , "EUC-JP");  $file = file('sample.csv');  $file[$i] = $lines."\n";  $fp = fopen("sample.csv","w+");  for($i=0 ; $i<count($file) ; $i++) {   flock($fp, LOCK_EX);   fwrite($fp, $file[$i]);  }  fclose($fp); ?> <div align="center"> 修正・変更しました!! <br><br> <input type="button" name="button" value="戻る" onClick="location.href='aaa.php'"> </div> </body> </html> 上記の様なプログラムを「CSVファイルを書き込む方法」を基に書いて みました。 しかしながら、どうしても任意の行のデータを修正して上書きする ことができません(涙 どうやったら任意の行のデータかどうかを認識して、上書きする事が できるのでしょうか?? 皆様お忙しい中かとは思いますが、ご教授して頂けませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • CSVからの抽出、並び替えのプログラム

    すいません。phpを勉強し始めたばかりで、CSVから抽出したものを並び替えたいと考えていまして、 サンプルプログラムをいくつか見ていたのですが一部よく分からない所があります。 例えば以下のプログラムで $names = Array(); と$names[] = $lines[0]; はどのような処理をしているのでしょうか? ただ単にCSVから読み込み→配列を全部表示では上記の処理は見当たりません。 斉藤一郎,170,60,A 鈴木二郎,180,90,B 田中三郎,190,80,O 中村四郎,160,100,AB <?php if( $handle = fopen( 'test.csv', 'r' ) ){ $names = Array(); // while( ( $lines = fgetcsv( $handle ) ) !== FALSE ){ if( $lines[2] >= 90 ){ //体重が90以上なら $names[] = $lines[0]; // } } echo '体重が90kg以上なのは、' . implode( '・', $names ) . 'です'; } ?>

    • ベストアンサー
    • PHP
  • phpでcsvデータをランダム表示について

    下記はcsvデータをランダムに1つだけ抽出するphpのプログラムですが、1度表示したデータに色をつけるとか、表示させない方法はありますか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> </head> <body> <?php // 抽出数 $count = 1; $list = array(); // 読み込みCSVファイル $lines = file('test.csv'); shuffle($lines); foreach ($lines as $line) { if ( ! in_array($line, $list)) { array_push($list, $line); if (count($list) >= $count) { break; } } } // CSVファイルに出力 $file = fopen('test2.csv', 'w'); foreach ($list as $l) { echo $l.'<br>'; if ($file) { fputs($file, $l); } } fclose($file); ?> </body> </html>

    • ベストアンサー
    • PHP
  • 1つのサーバで複数のドメイン管理

    AWS EC2を使ってウェブサーバを構築し、CakePHPをインストールしてウェブサイトを実装しております。 すでにドメインを2つ取得しており、それぞれのドメインでアクセスした際に、同じディレクトリにある2つのコントローラをそれぞれ実行させてページを表示させたいと思っております。 ドメイン(例) hoge.com fuga.com コントローラ(例) /lib/app/controllers/hoge_controller.php /lib/app/controllers/fuga_controller.php hoge.comに対しては、 routes.phpで Router::connect('/', array('controller' => 'hoge', 'action' => 'index')); と設定して hoge.comでアクセスした際にhogeコントローラのindexアクションが実行されるようにできましたが、この状態を維持しつつfuga.comでアクセスした際にfugaコントローラのindexアクションが実行されるようにできればと思っております。 cakephpやサーバの設定等は自由に行える環境ですので、cakephpのrouterやサーバのバーチャルホストの設定等で実現できますでしょうか。 お分かりいただける方いらっしゃいましたら、ご教授いただけますと幸いです。 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • コンストラクタを2ケ書いたらエラーになりました

    前回質問をさせて戴いたように、helperの計算部分を切り出しをして serivceを作りました。(ZangyoService) データベースから取得したデータの計算部分と結果判定表示部分を helperとserviceに分けました。 残業計算部分をserivice側で計算させてhelperに戻す処理は出来ました。 合わせて祝日判定を別のサービスに切り出すべくOurHelperにてHolidayServiceを 呼び出す処理を書いたところ、constructは2個かけないとエラ〜が出ました。 OurHelperの中にZangyoServiceとHolidayServiceを呼び込んでそれぞれの Serviceで計算と判定させてHelperに表示させたいと思っています。 また別の方法としてhelperとserviceを2ケづつ(OurHelperとZangyoService,SyuHelperとHolidayService)用意してそれぞれをindex.blade.phpに読み込ませようと しましたがtableとtrをourhelperに記載してループさせているために 行が揃いません。 表示イメージは下記のようなものをイメージしています。 日付 曜日 区分  開始  終了 休憩  実働  残業 深夜残業  祝日 11/23 水  3 9:00 18:00 1:00 8:00 0:00 0:00 勤労感謝の日 12/9  金  5  9:00 23:00 1:00 13:00 1:00 1:00 12/10 土  3  9:00 23:00 1:00 13:00 12:00 1:00 12/11 日  4  9:00 23:00 1:00 13:00 0:00 0:00 また別の質問になるのですが、日付ループをhelperとserviceどちらにも 同じように書いていますが、どちらか一方にループの部分を書いて判定させれないでしょうか? helperのソースを一部抜粋 use App\Services\ZangyoService; use App\Services\HolidayService; use App\Models\User; use App\Models\Kintai; use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; use \SplFileObject; class OurHelper { private $holiday; private $zan; private $zangyoService; private $holidays = []; private $holidayService; public function __construct(ZangyoService $zangyoService) { $this->zan = $zangyoService; } public function __construct(HolidayService $holidayService) { $this->holiday = $holidayService; } public function ourLogic($e_all){ $ym=Carbon::now(); $tm = date("n",strtotime($ym));//月 $ty = date("Y",strtotime($ym));//年 $youbi = array("日","月","火","水","木","金","土"); $countdate=date('t', mktime(0, 0, 0, $tm, 1, $ty)); foreach ($e_all as $e_time) { $e_all_by_day[$e_time->date_time][] = $e_time; } for ($i = 0; $i < $countdate; ++$i) { $ym=Carbon::now(); $tm = date("n",strtotime($ym));//月 $ty = date("Y",strtotime($ym));//年 $youbi = array("日","月","火","水","木","金","土"); $countdate=date('t', mktime(0, 0, 0, $tm, 1, $ty)); foreach ($e_all as $e_time) { $e_all_by_day[$e_time->date_time][] = $e_time; } for ($i = 0; $i < $countdate; ++$i) { echo '<tr>'; どうかよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 複数のアプリケーションを設置する場合について

    例えばフレームワークなどを利用して、掲示板やブログなどの複数のアプリケーション作成する場合に、 どのような区分けというかファイル構成が良いのでしょうか? コントローラ毎に分ける場合 ┬ project │└ app │ ├ controllers │ │└ bbsController.php(ここにwriteアクションやdeleteアクションなどを置く) │ │└ blogController.php モジュール毎に分ける場合 ┬ project │└ app │ ├ modules │ │└ bbs │ │ ├ controllers │ │ │└ indexController.php(トップページや表示関係) │ │ │└ ~Controller.php(他にどういうコントローラの種類が必要なのか分かりませんが・・・) その他にも アプリケーション毎に分ける場合(これもどういうファイル構成(どういうコントローラ分け)にしたら良いか分かりませんが・・・) プロジェクト毎に分ける場合 など、どの粒度に分けるのが自然(自分ならこうするとか)なのかアドバイス頂けないでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう