Поиск в массиве PHP и fgetcsv
Сидеть здесь часами, но я не вижу, в чем проблема.
У меня есть 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";
}
?>
1 ответ
Вы пытаетесь использовать 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 );