kn1ght_t
@kn1ght_t

Как найти строку в csv с помощью PHP?

есть csv файл вида:
66:41:0000000:1000;1 893 122,96
66:41:0000000:1001;752 956,92
66:41:0000000:1003;193 618 988,00
66:41:0000000:1004;425 933,64
66:41:0000000:1005;3 656 742,85
66:41:0000000:1006;3 459 967,45
66:41:0000000:1007;3 666 581,62
66:41:0000000:1008;3 541 957,20
66:41:0000000:1009;3 639 535,20


разделитель - точка с запятой
как найти и вернуть по первому значению соответствующую ему пару?
например: имеем 66:41:0000000:1009 -> получаем 3 639 535,20
  • Вопрос задан
  • 1542 просмотра
Решения вопроса 2
kn1ght_t
@kn1ght_t Автор вопроса
<?php

function find_value($filename, $value) {
    $f = fopen($filename, "r");
    $result = 'false';
    while ($row = fgetcsv($f, 0,";")) {
        if ($row[0] == $value) {
            $result = $row[1];
            break;
        }
    }
    
    fclose($f);
    return $result;
}

echo(find_value('test.csv', '66:41:0000000:1004'));

?>


как-то так получилось
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Для небольших csv файлов можно так:

// что ищем
$key = '66:41:0000000:1009;';
// где ищем, в виде строки
$file = file_get_contents('input.csv');

$key_pos = strpos($file, $key);                  // смещение, по которому найден ключ
$result_start_pos = $key_pos + strlen($key);     // начало искомой строки
$line_end_pos = strpos($file, "\n", $key_pos);   // конец искомой строки
$result_len = $line_end_pos - $result_start_pos; // длина искомой строки

$result = substr($file, $result_start_pos, $result_len);
$result = trim($result); // на случай \r\n
return $result;


Если файл большой, лучше читать построчно, каждую строку разбивать по разделителю и сравнивать
$key = '66:41:0000000:1009';
$str = '66:41:0000000:1009;3 639 535,20';

$splited = explode(';', $str);
if ($splited[0] === $key) {
    return $splited[1];
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Mixxer
php.net/manual/ru/function.explode.php

explode(";", "66:41......;12345")[1]

* Найти можно проходом построчно в цикле
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы