Сортировка с файла

Печать RSS
54

Автор
Персональный статус
0
есть файла строки в нем :
03.12.10/00:14:18:|:547657:|:xcb:|:479798
03.12.10/00:14:06:|:457567:|:xcbc:|:627228
03.12.10/00:13:56:|:4756:|:cvbncv:|:298157
03.12.10/00:13:48:|:4576:|:cnbvn:|:4365
03.12.10/00:13:29:|:47567:|:xcbv:|:415253
03.12.10/00:13:22:|:5675:|:fdvbcv:|:622803
03.12.10/00:13:15:|:4756:|:sgdfh:|:807526
03.12.10/00:11:49:|:7567:|:fdhdgh:|:611420
02.12.10/19:15:46:|:67567:|:fdhgh:|:103943
02.12.10/18:34:59:|:414344:|:апапп:|:52887
02.12.10/18:34:56:|:134245:|:ыаапа:|:52887
02.12.10/14:45:30:|:143446:|:ппвав:|:659852
разбиваю строку explode получаю масив чисел, строк вернее, как поставить сортировку по масиву масива который выдлен красным по убыванию, чтоб числа больше были вверху.
Изменил: Titov

Голубые штаны
0
я себе класс писал по сортировке и кешированию. Скорость вышла неплохая.
Жаль, сейчас не смогу посмотреть. Комп не включается. Постараюсь в ближайшее время помочь.

=======================
== Искренне ваш © LondoN™ ==
=======================
S

Чатланин
0
<?php
/*
типа тово
*/

$file = file('my.dat');

$date = array();
$number_1 = array();
$text = array();
$number_2 = array();
$new = array();

foreach ($file as $k=>$v) {
$e = explode(":|:",$v);
$date[] = $e[0];
$number_1[] = $e[1];
$text[] = $e[2];
$number_2[] = $e[3];
}

arsort($number_2);

foreach ($number_2 as $k=>$v) {
$new[] = $date[$k]."|".$number_1[$k]."|".$text[$k]."|".$number_2[$k];
}

print_r($new);

?>

Господин ПЖ
0
1. Тitov, самый простой способ
<?
  function mysort ($a, $b)
  {
    if ($a['3'] == $b['3']) return 0;
    return ($a['3'] > $b['3']) ? -1 : 1;
  }

$file = file('file.txt');

$arr = array();

foreach ($file as $data){
$array = explode (':|:', $data);

$arr[] = $array;
}
usort ( $arr , 'mysort' );
минус в том что функция одноразовая по сути, ключи уже внутри передаются
только в самом файле тебе нужно в конце ставить :|: или все числа обрабатывать через trim() я думаю первое лучше
Изменил: Вантуз-мен

Господин ПЖ
0
1. Тitov, способ получше за счет более доработанной функции которая не одноразовая, а может использоваться во всех массивах и с разными типами сортировки

<?
function multisort($array)
{
   for($i = 1; $i < func_num_args(); $i += 3)
   {
       $key = func_get_arg($i);
       if (is_string($key)) $key = '"'.$key.'"';
      
       $order = true;
       if($i + 1 < func_num_args())
           $order = func_get_arg($i + 1);
      
       $type = 0;
       if($i + 2 < func_num_args())
           $type = func_get_arg($i + 2);

       switch($type)
       {
           case 1: // Case insensitive natural.
               $t = 'strcasecmp($a[' . $key . '], $b[' . $key . '])';
               break;
           case 2: // Numeric.
               $t = '($a[' . $key . '] == $b[' . $key . ']) ? 0:( ($a[' . $key . '] < $b[' . $key . ']) ? -1 : 1)';
               break;
           case 3: // Case sensitive string.
               $t = 'strcmp($a[' . $key . '], $b[' . $key . '])';
               break;
           case 4: // Case insensitive string.
               $t = 'strcasecmp($a[' . $key . '], $b[' . $key . '])';
               break;
           default: // Case sensitive natural.
               $t = 'strnatcmp($a[' . $key . '], $b[' . $key . '])';
               break;
       }
       usort($array, create_function('$a, $b', '; return ' . ($order ? '' : '-') . '(' . $t . ');'));
   }
   return $array;
}


$file = file('file.txt');

$arr = array();

foreach ($file as $data){
$array = explode (':|:', $data);

$arr[] = $array;
}
$arr = multisort ($arr, 3, false, 2);

multisort (массив, ключ, сортировка ASC-DESC, способ type);
все кроме массива не обязательны, думаю разберешься, эту функцию и советую
Автор
Персональный статус
0
3. Всем спасибо за помощь.
Smart-Man, использовал твой метод сортировки.
Еще вопрос есть, файл с записямит тот же мне нужно сложить числа которые выделены красным, не все в кучу а составляющее каждого числа, тоесть если число 121212 нужно сложить 1+2+1+2+1+2 = 9 как сделать чтоб проще было и быстро?
S

Чатланин
0
6, тебе отсортированные данные надо слаживать или какие были и сортировать по итогам сложения?
А

Оранжевые штаны
0
<?php
$str='1222l';
for($i=0,$sum=0,$s=strlen($str);$i<$s;$i++) $sum+=$str[$i];
Автор
Персональный статус
0
8 спасибо, именно то что нада, сменя +
Стикеры / Теги / Правила