Uma_
@Uma_ (ゆま)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

fgetcsv関数で読み込んだCSVの行数を表示させる

解決したいこと

fgetcsvで読み込んだCSVデータの行数を
count関数で数えようとしているのですが上手く表示されません。

おかしなところあれば教えていただきたいです。

発生している問題・エラー

あまり大したエラーは発生していません。

[Violation] 'requestIdleCallback' handler took 266ms

発生しているエラーはこちらになります。

該当するソースコード

<?php
//職業情報の取得
if (isset($_POST['job']) && is_array($_POST['job'])) {
    $job = implode("、", $_POST["job"]);
}
var_dump($job);
echo("<br>");

//契約タイプの取得
if (isset($_POST['type']) && is_array($_POST['type'])) {
    $type = implode("、", $_POST["type"]);
}
var_dump($type);

// 読み取り専用でtest.csvを開きます。
$f = fopen("job.csv", "r");
// mb_convert_encodingでCSVから取得した文字列をsjisからutf-8に変換
$buf = mb_convert_encoding(file_get_contents($f), "utf-8", "sjis");

// test.csvの行を1行ずつ読み込みます。
while($data = fgetcsv($f)){
    // 1行分の要素すべてを文字列として結合しても空ではない、つまり空行でなければ出力します。
    if(implode($data) != null){
        // 読み込んだ結果を表示します。

//行数を表示
$count = count($data);
var_dump($count);

//好きな業種なら表示
if (preg_match("/$job/", $data[2])) {
//好きなタイプなら表示
if (preg_match("/$type/", $data[11])) {

?>

自分で試したこと

count関数や.lengthを試したのですが、
行数を表示させることはできませんでした。

0

2Answer

こちらで解決できました。


//行数を表示
if (($fp = fopen("job.csv", "r")) !== FALSE) { 
  while (($record = fgetcsv($fp)) !== FALSE) {
      $row++;
  }

  echo $row;
}

0Like

fgetcsv — ファイルポインタから行を取得し、CSVフィールドを処理する

$data = fgetcsv($f)は1行分を取得するものです
そのため、count($data)としても、列数を取得するだけです。

行数は自身で集計する必要があります

$count = 0;

while($data = fgetcsv($f)){
    if(implode($data) != null){
       ++$count;
    }
}
var_dump($count);
0Like

Your answer might help someone💌