坐在这里几个小时,但我看不出有什么问题。
我有1个档案: Gross_matching.csv:
Actionspiele,77
Strategiespiele,112
关键字是“Actionspiele,Strategiespiele”。
想获得此文件,并在“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";
}
?>
答案 0 :(得分:4)
您尝试使用array_search()
在数组"Actionspiele"
中查找字符串$csv
,但该数组的所有值本身都是数组,而不是字符串,因此搜索失败并且返回false
。当您使用false
作为数组索引时,它会被强制转换为0,因此它总是为您提供数组的第一行。
我会重写你的数组构建代码,看起来像这样:
$csv = array();
while ( $result = fgetcsv( $file_gross, "," ) ) {
$csv[ $result[0] ] = $result[1];
}
这将使用CSV文件的第一列作为键,第二列作为$csv
数组的值,因此它将如下所示:
$csv = array(
'Actionspiele' => 77,
'Strategiespiele' => 112,
);
然后您可以直接在数组中查找关键字,如下所示:
$ids = array();
foreach ( $keywords as $keyword ) {
$ids[] = $csv[ $keyword ];
}
$string = implode( '|', $ids );