PHP ile soyadına göre sıralama, bir CSV dosyası

3 Cevap php

Nasıl PHP kullanarak aşağıdaki CSV dosyasını sıralamak istiyorsunuz? Ben soyadına göre sıralamak istiyorum. Ben soyadının ilk harfini almak için bir şekilde regex kullanıyor musunuz? Herhangi bir yardım takdir

İşte benim CSV dosyasının bir alıntıdır - Bir ile ";" adları ve adresleri arasında sınırlayıcı

John C. Buckley, M.D.;123 Main Street, Bethesda MD 20816
Steven P. Wood;345 Elm Street, Rockville, MD 20808
Richard E. Barr-Fernandez;234 Pine Street, Takoma Park MD 20820
Charles Andrew Powell; 678 Oak Street, Gaithersburg MD 20800
Mark David Horowitz, III; 987 Wall Street, Silver Spring MD 20856

3 Cevap

İşte benim girişimi olduğunu. Ben regex olsa soyadını ayıklamak için nasıl sağlam emin değilim.

<?php
$handle = fopen('c:/csv.txt', 'r') or die('cannot read file');
$surnames = array();
$rows = array();

//build array of surnames, and array of rows
while (false != ( $row = fgetcsv($handle, 0, ';') )) {
    //extract surname from the first column
    //this should match the last word before the comma, if there is a comma
    preg_match('~([^\s]+)(?:,.*)?$~', $row[0], $m);
    $surnames[] = $m[1];
    $rows[] = $row;
}

fclose($handle);

//sort array of rows by surname using our array of surnames
array_multisort($surnames, $rows);

print_r($rows);
//you could write $rows back to a file here if you wanted.

Edit

Ben sadece bu muhtemelen gerçekten sıralama etkilemez çünkü gerçekten, insanların son ekleri kapalı şerit gerekmez fark etti. Sadece uzay ilk sütunu bölünmüş ve (karim79 önerilen) sonuncusu sürebilir. Kişi boşluklarla daha eklerini varsa bu olsa bozabilir, bu yüzden bozulmamış benim cevap bırakacağım.

Bir CSV olduğu Eh, çünkü

$lines = file($file);
foreach($lines as $line)
{
    $parts = explode(";", $line);
    $last = explode(" ", $parts[0]);
    $last = end($last);
    $array[$last] = $parts;
}

ksort($array);

// ..... write it back to file

PHP işlevi array_multisort istediğini yapmalıdır. Sen çok boyutlu bir diziye CSV okumak gerekir - bağlantılı sayfasındaki üçüncü örneğe bakın.