PHP 제품 데이터 TXT 파일을 읽습니다
-
10-07-2019 - |
문제
PHP에서 읽고 싶은 제품 데이터가 포함 된 .txt 파일이 있습니다. 각 라인에는 하나의 제품이 포함되어 있으며 제품 세부 사항 (번호, 이름 및 가격)은 탭으로 분리됩니다. 아래에서 볼 수 있듯이, 프록 컷 이름의 길이의 차이로 인해 가격이 수직으로 잘 정렬된다는 것은 항상 사실이 아닙니다. 데이터는 다음과 같습니다.
ABC001 an item description $5.50
XYZ999 an other item $6
PPP000 yet another one $8.99
AKA010 one w a longer name $3.33
J_B007 a very long name, to show tabs $99
(탭을 보여주는 방법을 몰랐기 때문에 위의 예제의 공간이지만 실제 파일에서는 실제 탭입니다).
이것을하는 가장 효율적인 방법은 무엇입니까? (그건 그렇고, 원격 파일입니다) 제품 당 제품 데이터가 포함 된 배열을 갖고 싶습니다.
$product['number'], $product['name'] and $product['price']
매우 감사합니다!
해결책
1) 가장 쉬운 방법은 File ()을 사용하여 모든 줄을 배열에로드하는 것입니다 (파일이 실제로 크지 않으면 다른 접근법을 고려할 것입니다).
2) 각 줄을 탭으로 분할 ( " t"문자)
3) 원하는대로 배열 열을 "형식"하십시오.
샘플 스 니펫 :
$productsArray = file($productsFileName, FILE_IGNORE_NEW_LINES);
foreach ($productsArray as $key => &$product) {
$arr = explode("\t", $product);
$product = array('number' => $arr[0], 'name' => $arr[1], 'price' => $arr[2]);
}
var_dump($productsArray);
다른 팁
fgetcsv ()는 좋은 기능입니다
예제를 확인하십시오http://us3.php.net/manual/en/function.fgetcsv.php, 여기에 약간 수정 된 버전이 있습니다.
$products = array();
$handle = fopen("products.txt", "r");
while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
$products[] = array(
'number' => $data[0],
'name' => $data[1],
'price' => $data[2]
);
}
fclose($handle);
$fileArr = file('path.to.your.file.txt');
$productsData = array();
for ($i = 0; $i < count($fileArr); $i++) {
$lineData = preg_match('/^(\w{3}\d{3})\s+(.*)\s+\$(\d+(\.\d+))$/', $fileArr[$i], $matches);
$productsData[] = array(
'number' => $matches[1],
'name' => $matches[2],
'price' => $matches[3]
);
}
사용 사용이 느려지지만 값 간의 구분 기호로 하나의 탭보다 더 많은 파일을 구문 분석 할 수도 있습니다. 게다가 당신은 벗길 필요가 없습니다 $
가격에서 서명. 당신이 지키지 않으면 $
대신이 REGEX를 사용해야하는 가격으로 서명하십시오.
'/^(\w{3}\d{3})\s+(.*)\s+(\$\d+(\.\d+))$/'
제휴하지 않습니다 StackOverflow