2017-11-25 5 views
-1

いくつかの単語が含まれている場合、csvカラム(文字列)をチェックする必要があります。それをcsvの配列に追加します。ここに私の現在のコードです。PHPがstrposでcsvカラムをチェックする

例のcsv

 A   B 
1 Order Number Order Items 
2 100001  foo - sbar - ybaz - z 
3 100002  foo - sbar - ybaz - z 

は、これは私のコードです。

$csv = array_map("str_getcsv", file(/path/to/csv/, FILE_SKIP_EMPTY_LINES)); 
$keys = array_shift($csv); 

$values = ["foo - s", "baz - z"]; 

foreach ($csv as $key => $row) { 
    $csv[$key] = array_combine($keys, $row) 

    foreach ($values as $value) { 

     if (strpos($row[0], $value) !==FALSE) { 
      $csv[$key][$keys[1]] = $value; 
     } 

    } 

} 

これは私が達成したいことです。

[0] => 
array(2) => { 
    ["Order Number"] => "100001" 
    ["Order Items"] => 
    array (2) { 
     [0] => "foo - x", 
     [1] => "baz - z" 
    } 
} 
[1] => 
    array(2) => { 
     ["Order Number"] => "100002" 
     ["Order Items"] => 
     array (2) { 
      [0] => "foo - x", 
      [1] => "baz - z" 
     } 
    } 

これは私がこの$csv[$i][$keys[1]][] = $value;

このエラーショー追加して作る場合はどのような私のコードの出力

[0] => 
array(2) => { 
    ["Order Number"] => "100001" 
    ["Order Items"] => "baz - z" 
} 
[1] => 
    array(2) => { 
     ["Order Number"] => "100002" 
     ["Order Items"] => "baz - z" 
    } 

です:Fatal error: [] operator not supported for strings

+0

$ rowが列名の文字列であることを確認してください。 –

+0

はい、申し訳ありません。自分のコードに関する情報を追加しました。どうぞご覧ください –

+0

'$ csv [$ i] = array_combine ...' $ iとは何ですか? – splash58

答えて

0

をあなたが行をスキャンする1つの以上のループを追加する必要があります値

$csv = array_map("str_getcsv", file('php://stdin', FILE_SKIP_EMPTY_LINES)); 
$keys = array_shift($csv); 

$values = ["foo - s", "baz - z"]; 

foreach ($csv as $key => $row) { 
    $csv[$key] = array_combine($keys, $row); 
    foreach($row as $k=>$i) { 
     foreach ($values as $value) { 
      if (strpos($i, $value) !==FALSE) { 
       if (! is_array($csv[$key][$keys[1]])) $csv[$key][$keys[1]] = []; 
       $csv[$key][$keys[1]][] = $value; 
      } 
     } 
    } 
} 

demo