Группировать строки двумерного массива по столбцуPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Группировать строки двумерного массива по столбцу

Сообщение Anonymous »

У меня есть форма загрузки .csv, которая берет значения из файла и форматирует их соответствующим образом. Или, по крайней мере, это то, чего я пытаюсь достичь.
Я пытаюсь отформатировать индекс 6 каждого внутреннего массива с именем, которое содержится внутри , пример:

Код: Выделить всё

Array (
[0] => Array (
[0] => 2
[1] => 230
[2] => 12 Aug 2013 07:46 AM
[3] => 816
[4] => INB
[5] => 1.38
[6] => Leonard
)
)
Array (
[0] => Array (
[0] => 2
[1] => 230
[2] => 12 Aug 2013 07:46 AM
[3] => 816
[4] => INB
[5] => 1.38
[6] => Leonardo
)
[1] => Array(
[0] => 3
[1] => 170
[2] => 12 Aug 2013 07:47 AM
[3] => 170
[4] => OUT (EXTENSION)
[5] => 1.08
[6] => Greg
)
)
Итак, этот файл .csv будет содержать тысячи этих записей, но я пытаюсь отформатировать его так, чтобы все записи Леонардо были сгруппированы вместе, а не по одной здесь и там, а также на 100 строк ниже в файле .csv, который отправляется для загрузки.
Во-первых, позвольте мне объяснить, как извлекаются данные. Цикл while открывает файл и проходит по всему файлу. Данные анализируются и затем проверяются, каждый массив сохраняется в этом:

Код: Выделить всё

$collectedData[$i] = $tmpfileop;
$i++;
Вот что я сейчас делаю:

Код: Выделить всё

        #FUNCTION TO CLEAN DATA
function cleanData(&$str)
{
// escape tab characters
$str = preg_replace("/\t/", "\\t", $str);

// escape new lines
$str = preg_replace("/\r?\n/", "\\n", $str);

// convert 't' and 'f' to boolean values
if($str == 't') $str = 'TRUE';
if($str == 'f') $str = 'FALSE';

// force certain number/date formats to be imported as strings
if(preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) {
$str = "'$str";
}

// escape fields that include double quotes
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';

}

$filename = "call_logs_as_of_" . date('Ymd') . ".xls";

header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");

$flag = false;
foreach($collectedData as $row) {
if(!$flag) {
// display field/column names as first row
echo implode("\t", array_keys($row)) . "\r\n";
$flag = true;
}
array_walk($row, 'cleanData');
echo implode("\t", array_values($row)) . "\r\n";
}
Это прекрасно работает, просто оно неправильно отформатировано, и я не понимаю, как выполнить то, что пытаюсь сделать.

Подробнее здесь: https://stackoverflow.com/questions/206 ... y-a-column
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»