Ayrı diziler içine PHP, CSV sütunlar

3 Cevap php

Temelde, ben bir kullanıcı bir CSV dosyasını yükleyebilir ve / süreç yüklemek istediğiniz sütunları seçebilirsiniz bir sistem yapmak istiyorum

I can do this fine by using fopen and foreach, but since the number of the column may vary from CSV to CSV....

i can store the picked columns in an array, eg picked[]= "1,2,4"; //from 1,2,3,4 columns comma separated or anyway i want.

ama nasıl ben listesi gibi bir şey (1,2,4) kullanın = (",", TheData []) patlayabilir;

burada ben dinamik orada, 1,2,4 yükleyebilirsiniz, hatta 1,2,3,4 ve sonra ben 3 sayabilirsiniz.

3 Cevap

iyi csv Eğer satır dizini ve sütun dizini var gibi çeşit 2 boyutlu bir dizidir.

Önce ayrı satırlarda her şeyi bölmek için satır sonları (\ n) bölmek zorunda kalacak. Sonra her satır virgülle ayrılmış olmalıdır. Ilk satır için sütun adları olacaktır.

Tüm bu kolayca kendiniz kodlanmış olabilir ...

Ya fgetcsv işlevini kullanabilirsiniz

Function gets explained on: http://php.net/manual/en/function.fgetcsv.php

Eğer her satırdan gerekmez sütunları unset yapabilirsiniz:

$theData = array(
    array( 'col1', 'col2', 'col3', 'col4', 'col5' ),
    array( 'col1', 'col2', 'col3', 'col4', 'col5' ),
    array( 'col1', 'col2', 'col3', 'col4', 'col5' )
    );
$picked = '1, 3, 5';

$totalColumns = count( $theData[0] );
$columns = explode( ',', $picked );
foreach( $theData as $k => &$thisData ) {
    for( $x = 1; $x < $totalColumns + 1; $x++ ) {
        if( ! in_array( $x, $columns ) ) {
            unset( $thisData[$x - 1] );
        }
    }
}

for döngü ve de 0-indeks ayarlamalar için dikkat unset - olmayan sizin örnekte 0-endeksli olan sütun sayıları kullandık çünkü bu.

"Tüm argümanlar mevcut tuşları var dizi1 tüm girdileri içeren bir dizi döndürür.": Sen array_intersect_key() kullanabilirsiniz

http://www.php.net/manual/en/function.array-intersect-key.php

Bunun için ilk önce, örneğin, satır veri satırı işlemek gerekir gibi görünen bir dizi

$data[column] = array(entries):

Example:

$data = array(
  1 => array (
    entry1,
    entry2,
    etc
  ),
  2 => etc
);

Sonra orada sütunları kullanıcı göstermek, kullanıcı o, örneğin kullanmayı seviyor sütunları seçer:

$selected = array(1,2,4);

Ardından seçilen sütunları ile bir dizi almak için kesişiyor:

 $use = array_intersect_key($data, $selected);