0

ここに何時間も座っているが、何が問題なのか分からない。

1 つのファイルがあります: Gross_matching.csv:

Actionspiele,77
Strategiespiele,112

そしてキーワードは「アクションゲーム、ストラテジーゲーム」。

そして、このファイルを取得し、「Actionspiele」を検索して、「77|112」を取得したいと考えています。しかし、私は「77 | 77」を取得しています。理由を知っている人はいますか?

<?php
if (!empty($articleData['keywords'])) {
    $temp_dir = "...";
    if (file_exists($temp_dir."gross_matching.csv")) {
        $csv = array();
        $file_gross = fopen($temp_dir."gross_matching.csv", 'r');
        while (($result = fgetcsv($file_gross, ",")) !== false) {
            $csv[] = $result;
        }
        fclose($file);
    } else {
        $articleData['attr_attr18'] .= " | File not found";
    }
    if (!empty($csv)) {
        $string = '';
        $keywords = explode(",", $articleData['keywords']);
        if(is_array($keywords)) {
            foreach($keywords as $key => $value) {
                $pos = array_search($value, $csv);
                $string .= $csv[$pos][1]."|";
            } 
            if (!empty($string)) {
                $articleData['attr_attr18'] = $string;
            } else {
                $articleData['attr_attr18'] .= " - String empty";
            } 
        }
    } else {
        $articleData['attr_attr18'] .= " - csv empty";
    }
} else {
    $articleData['attr_attr18'] .= " - not Gross";
}
?>
4

1 に答える 1

4

を使用して配列内array_search()の文字列を検索しようとしていますが、その配列のすべての値は文字列ではなくそれ自体が配列であるため、検索は失敗してを返します。配列インデックスとして使用する場合、0にキャストされるため、常に配列の最初の行が提供されます。"Actionspiele"$csvfalsefalse

配列構築コードも次のように書き直します。

$csv = array();
while ( $result = fgetcsv( $file_gross, "," ) ) {
    $csv[ $result[0] ] = $result[1];
}

これにより、CSVファイルの最初の列がキーとして使用され、2番目の列が$csv配列の値として使用されるため、次のようになります。

$csv = array(
    'Actionspiele' => 77,
    'Strategiespiele' => 112,
);

次に、次のように、配列内のキーワードを直接検索できます。

$ids = array();
foreach ( $keywords as $keyword ) {
    $ids[] = $csv[ $keyword ];
}
$string = implode( '|', $ids );
于 2013-01-06T20:25:05.250 に答える