Zend çerçevesini kullanarak CSV dosyalarını nasıl alabilirim? Zend_file_transfer kullanmalı mıyım yoksa bakmam gereken özel bir sınıf var mı? Ayrıca eğer zend_file_transfer kullanırsam CSV için özel bir doğrulayıcı var mı?zend kullanarak alma CSV
cevap
size sadece Zend ile bunu yapmak için hiçbir yolu yoktur fgetcsv
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
Yan uyarı: 'fgetcsv()' gerçekten unicode'u desteklemiyor, bu yüzden lokalleri juggle etmeniz gerekebilir. – Darien
Evet, bunu fgetcsv kullanarak nasıl yapacağımı biliyorum ama özellikle zend ile ilgileniyorum. Yine de cevabın için teşekkürler. – JABD
Dahili CSV fonksiyonları hatalı ve buggy. Yerel PHP'de CSV'yi ayrıştırmaya çalışmak bir kabus. –
bakmak, yerli php fonksiyonlarını kullanabilir, csv dosyalarını almak için herhangi bir zend kütüphaneleri kullanmak zorunda değilsiniz Çerçeve. Nasıl emin olabilirsiniz? Örneğin
, Zend_Translate CSV dosyaları ile çeviriyi desteklemektedir, ancak ilgili adaptör (Zend_Translate_Adapter_Csv ) kaynak kodunu kontrol ederseniz, bunu fgetcsv değil, belirli bir Zend sınıfı kullanır doğrulayabilir. Ayrıca, bu CSV adaptör aşağıdaki uyarı geliyor:Not: CSV dosyaları çevrenin yerel ayarından daha farklı şekilde kodlanmış olduğunda Csv Adaptörü problemleri olduğu dikkat edin. Bu, PHP 6.0 'un PHP 6.0 (http://bugs.php.net/bug.php?id=38471) 'den önce düzeltilmeyeceği bir Hata Bugünden dolayı 'dur. Csv Bağdaştırıcının PHP kısıtlamaları nedeniyle yerel ayarının farkında olmadığını unutmayın. fgetcsv fonksiyon sorunları ile ilgilidir
.
Burada, csv dosyasını okuyan ve ilk iki sütun veri değerini içeren bir dizi öğe döndüren bir işlev vardır.
Bu işlev örneğin first_name, last_name adlı bir dosyayı okuyabilir.
function processFile ($filename) {
$rtn = array();
if (($handle = fopen($filename, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$item = array();
$item[] = $data[0];
$item[] = $data[1];
$rtn[] = $item;
}
}
return $rtn;
}
Ayrıca CSV dosyalarını okumak için SplFileObject
'u da kullanabilirsiniz. php kılavuzunda itibaren
<?php
$file = new SplFileObject("animals.csv");
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
list($animal, $class, $legs) = $row;
printf("A %s is a %s with %d legs\n", $animal, $class, $legs);
}
?>
SplFileObject herhangi bir yararlı doğrulama/hata sağlamaz - çöplükten geçmek, $ satırının öğenin tüm satırın olduğu bir öğe dizisi olmasıyla sonuçlanacaktır. –
, sen Zend_Translate veya bir çeviri dosyası ayrıştırmak için aradığınız sürece (Zend içinde CSV ayrıştırmak için hiçbir sınıf var CSV dosyaları ile Zend_Auth kullanıyorsanız). 'Fgetcsv' ile oldukça basit, o yüzden sanırım orada bir derse gerek yok. – netcoder
@netcoder Tamam! Çok teşekkürler – JABD