Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Сортировка строковых данных
Новая тема
Ответить
цитата
12/01/12 в 18:10
Lexikon
freeek писал:
а можно весь код, как ты используешь, если весь массив видишь, и с индексами там все в порядке, то ошибки нет,
Notice: Undefined offset
такая ерунда вылазит, когда типа нет проверки на существование того или иного индекса в массиве
$file = array_slice(file('data.txt'), 1);
function newSort($array, $byElem = 1, $asc = true) {
$temp = array();
--$byElem;
foreach ($array as &$string) {
$a = explode('|', $string);
$temp[$a[$byElem]] = $string;
}
!!$asc ? ksort($temp) : krsort($temp);
return $temp;
}
$result = newSort($file, 2, false);
echo $result [1];
цитата
12/01/12 в 18:12
FXIX
и вообще. вы товарищи написали уже тут десятки строк кода. нашли у друг друга ошибки. а мой вариант в 1 строку...
давайте еще 3 раза код поправьте, допишите еще 30 строк. чтобы отсортировать циферки по убыванию
цитата
12/01/12 в 18:16
freeek
Yacc писал:
Потому что массив в пхп - это хэш-таблица, а индексы последней, как известно должны быть уникальны.
это понятно что в php массивы это хэш таблицы, я про это и спрашивал, что часть данных может похериться если сами строки, которые мы пытаемся сравнить, буду идентичны. но мне кажется, тут может вопрос встать как раз таки наоборот, чтобы все строки на вывод были уникальными. а так да.
цитата
12/01/12 в 18:18
Yacc
FXIX писал:
вообще в кусок кода отвечающий за сортировку - не надо подмешивать логику работы с 10гиговыми файлами.
В кусок кода отвечающий за сортировку - не надо подмешивать вообще никакую логику. В этом смысле мой вариант самый кошерный.
цитата
12/01/12 в 18:19
freeek
Lexikon писал:
$file = array_slice(file('data.txt'), 1);
function newSort($array, $byElem = 1, $asc = true) {
$temp = array();
--$byElem;
foreach ($array as &$string) {
$a = explode('|', $string);
$temp[$a[$byElem]] = $string;
}
!!$asc ? ksort($temp) : krsort($temp);
return $temp;
}
$result = newSort($file, 2, false);
echo $result [1];
там другая функция,
Код:
function newSort($array, $byElem = 1, $asc = true) {
$temp = array();
--$byElem;
foreach ($array as &$string) {
$a = explode('|', $string);
$temp[$string] = $a[$byElem];
}
!!$asc ? asort($temp) : arsort($temp);
return array_keys($temp);
}
к замечаниям нужно отметить, что в массиве останутся только уникальные отсортированные строки
цитата
12/01/12 в 18:29
Lexikon
Ладненько, всем спасибо, оценил.
Буду изучать ибо ничего не понял что куда и как
функции, функции
а куда их встатить чет я полный ноль
Попробовал все коды, но то ошибка то не работает. Но это се по незнанке момей нужно изучать матчасть.
цитата
12/01/12 в 18:38
Yacc
Lexikon писал:
Попробовал все коды,
Я тоже, всё работает.
цитата
12/01/12 в 18:50
Lexikon
да я то не сомневаюсь что оно работает, просто по своей малознаемости не особо соображаю что и куда вставить, функция есть, а как прикрутить это все к файлу с данными несоображу.
Вот даже этот код :
<?php
$data = '';
$loc = '';
$file = file('data.txt');
$count = count($file);
for( $i = 1; $i < $count; $i += 1 )
{
$data .= $file[$i].'\n';
}
//echo $data;
$data_n = explode('\n', $data );
function mySort($a, $b) {
$r1 = explode('|', $a);
$r2 = explode('|', $b);
return -strcmp($r1[3], $r2[3]);
}
usort($data_n, 'mySort');
//echo $count;
for( $i = 1; $i < $count-1; $i += 1 )
{
$res = explode( "|", $data_n[ $i ] );
$loc .= $res[1].'|';
}
$str = explode("|", $loc);
$n = 0;
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
?>
содержание файла
flag
name|700|490|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|100|100|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|300|490|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|400|100|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
Сортировка происходит но:
Notice: Undefined offset: 3 in H: ... on line 21
Notice: Undefined offset: 3 in H: ... on line 21
Notice: Undefined offset: 3 in H: ... on line 21
Notice: Undefined offset: 3 in H: ... on line 21
в чем ошибка х.з
цитата
12/01/12 в 19:35
FXIX
Yacc писал:
В кусок кода отвечающий за сортировку - не надо подмешивать вообще никакую логику. В этом смысле мой вариант самый кошерный.
вы человека мучаете едрен-батон. он нихера не понял
freeek писал:
это понятно что в php массивы это хэш таблицы, я про это и спрашивал, что часть данных может похериться если
сами строки
, которые
мы пытаемся сравнить
, буду идентичны. но мне кажется, тут может вопрос встать как раз таки наоборот, чтобы все строки на вывод были уникальными. а так да.
дубликаты целиком строк убираются вот так:
$file= array_values(array_unique($file));
а тут пытаемся сравнить строки по одному(N3) из ряда параметров
name|N1|N2|N3|...
и по этому параметру похерятся
разные
строки.
цитата
12/01/12 в 19:37
Yacc
Файл data.txt, расположенный в одном каталоге с исполняемым файлом:
Код:
flag
name|700|490|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|100|100|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|300|490|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|400|100|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
Исполняемый файл:
Код:
function sort_by( $array, $key, $order = 'DESC', $flag = SORT_NUMERIC ) {
$x = array();
$y = array();
reset( $array );
foreach( $array as $i => $v ) $x[ $i ] = $v[ $key ];
if( $order == 'ASC' ) asort( $x, $flag );
elseif( $order == 'DESC' ) arsort( $x, $flag );
foreach( $x as $i => $v ) $y[ $i ] = $array[ $i ];
return $y;
}
function yacc_sort( $data, $number ) {
$x = array();
foreach( $data as $s ) $x[] = explode( '|', $s );
$y = sort_by( $x, $number - 1 );
foreach( $y as $k => $v ) $y[ $k ] = implode( $v, '|' );
return $y;
}
$data = file( __DIR__.DIRECTORY_SEPARATOR.'data.txt' );
unset( $data[ 0 ] );
$result = yacc_sort( $data, 4 );
echo('<pre>'.print_r($result, 1).'</pre>');
Профит:
1. В индесах сохраняется предыдущий порядок:
Код:
Array
(
[6] => name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[4] => name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[0] => name|700|490|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[8] => name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[1] => name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[5] => name|400|100|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[3] => name|300|490|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[7] => name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[2] => name|100|100|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
)
2. Функция sort_by полезна сама по себе:
Код:
$d = array(
array(
'id' => 1,
'rating' => 2
),
array(
'id' => 2,
'rating' => 3
),
array(
'id' => 3,
'rating' => 1
)
);
$d_sorted_by_id = sort_by( $d, 'id' );
$d_sorted_by_rating_asc = sort_by( $d, 'rating', 'ASC' );
цитата
12/01/12 в 19:51
Lexikon
Просто потом мне нужно делать вставки
<?php echo $str[ $n++ ]; ?>
А как я понял то что сам масив сортируется это ясно, но вот если я буду делать вставки на странице
<?php echo $str[ $n++ ]; ?> - тут должно быть первое значение
<?php echo $str[ $n++ ]; ?> - тут должно быть второе значение
<?php echo $str[ $n++ ]; ?> - тут должно быть третье значение
а оно так не получается, только в моем коде все как нужно, но там ошибки и х.з. сделал вывод что проще заплатить за скрипт ибо разобраться с ошибками не получилось.
цитата
12/01/12 в 19:57
Yacc
Lexikon писал:
потом мне нужно делать вставки
<?php echo $str[ $n++ ]; ?>
Код:
...
$result = yacc_sort( $data, 4 );
...
$n = 0;
echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];
...
цитата
12/01/12 в 19:59
freeek
FXIX писал:
вы человека мучаете едрен-батон. он нихера не понял
дубликаты целиком строк убираются вот так:
$file= array_values(array_unique($file));
а тут пытаемся сравнить строки по одному(N3) из ряда параметров
name|N1|N2|N3|...
и по этому параметру похерятся
разные
строки.
внимательно посмотри мою функцию?))
что я там делаю, собственно по этому поводу возникло замечание у
Yacc
, в php массивы это хеш таблицы и если в моем случае строки совпадут, тот останется только одна из них.
сама сортировка идет по
Ni
параметру и тут проблем нет, проблема в том, что уже тот массив который я сортирую будет иметь только уникальные ключи - наши строки.
цитата
12/01/12 в 20:15
Lexikon
Yacc писал:
Код:
...
$result = yacc_sort( $data, 4 );
...
$n = 0;
echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];
...
Это понятно, спасибо!
Но
тут вон в чем ситуация
Цитата:
Array
(
[6] => name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[4] => name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[0] => name|700|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[8] => name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[1] => name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[5] => name|400|540|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[3] => name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[7] => name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[2] => name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
)
по сути это
$n = 0;
echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];
выглядет так:
echo $result[ 1 ];
echo $result[ 2 ];
echo $result[ 3 ];
т.е. выведутся строки
[1] => name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[2] => name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[3] => name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
а мне строки не нужны только значения, второе значение в строке.
Т.е. сортирую данные массива по 3-ему значению и вывожу 1-ое
т.е. должно быть так:
Содержимое файла :
Цитата:
flag
name|700|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|400|540|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
---
После сортировки:
Цитата:
name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|700|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|400|540|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
---
Вставляем значения :
если первое то
$n = 0;
echo $result[ $n++ ]; // 900
echo $result[ $n++ ]; // 800
echo $result[ $n++ ]; // 700
echo $result[ $n++ ]; // 600
echo $result[ $n++ ]; // 500
и так до конца
если второе то
$n = 0;
echo $result[ $n++ ]; // 310
echo $result[ $n++ ]; // 480
echo $result[ $n++ ]; // 100
echo $result[ $n++ ]; // 310
echo $result[ $n++ ]; // 540
и так до конца
цитата
12/01/12 в 20:19
Lexikon
Поэтому я и сортирую по третьему значению (по убыванию),
парсю этот масив и вывожу первое значение.
А у вас получается по индексам и соответственно
$n = 0;
echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];
выводит все не в том порядке в котором отсортировано, а по индексам.
цитата
12/01/12 в 20:34
freeek
так тебе после сортировки, надо вывести какой то параметр только из строки?
цитата
12/01/12 в 20:47
Lexikon
из строк
сколько echo $result[ $n++ ]; столько и выводов
цитата
12/01/12 в 20:53
Yacc
Код:
function yacc_sort( $d, $a, $b ) {
$x = array();
$t = array();
foreach( $d as $s ) {
$z = explode( '|', $s );
$x[] = $z[ $a ];
$t[] = $z[ $b ];
}
arsort( $t, SORT_NUMERIC );
$y = array();
foreach( $t as $k => $v )
$y[] = $x[ $k ];
return $y;
}
$data = file( __DIR__.'\data.txt' );
unset( $data[ 0 ] );
// 2 - Индекс для результата
// 3 - Индекс для сортировки
// Начиная с 0
$result = yacc_sort( $data, 2, 3 );
цитата
12/01/12 в 21:26
Lexikon
так как ни сортируй индекс не меняется
$n = 0;
echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];
а вывод по индексу идет
если
[1] => name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
то как ни крути если
echo $result[ $1];
он и отобразит всё что в этой строке, тут всё завязано на индексе, в том то и проблема
мне нужно отсортировать по третьему параметру, оно отсортировалось:
Array
(
[6] => name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[4] => name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[0] => name|700|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[8] => name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[1] => name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[5] => name|400|540|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[3] => name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[7] => name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[2] => name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
)
но при такой сортировки мне нужно сделать вывод из первой строки
т.е. в сортировке это
[6] => name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
но индекс у нее [6] и соответственно когда я сделаю вставку
<?php echo $result[ 0 ]; ?>
соответственно скрипт выдаст
[0] => name|700|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
похоже просто друг друга не поймем.
Если бы массив был бы:
Array
(
name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|700|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|400|540|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
)
то проблем бы небыло, а он с индексами и если индекс [6] я не могу обратиться к нему как к нулевому.
-----
У меня тумбы в ротаторе, а это их данные имя|показы|клики|CTR|и т.д.
name|900|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|800|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|700|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|400|540|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|200|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
сортирую строки по CTR и c помощью <?php echo $result[ $n++ ]; ?> вывожу под тумбой показы или клики.
Соответственно
$n = 0;
затем
<?php echo $result[ $n++ ]; ?> - это 1, а соответственно должно быть 0.009 / 900
<?php echo $result[ $n++ ]; ?> - это 2, а соответственно должно быть 0.008 / 800
<?php echo $result[ $n++ ]; ?> - это 3, а соответственно должно быть 0.007 / 700
но скрипт начнет выводить по индексам т.е. для него это будет
[1] => name|500|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[2] => name|100|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
[3] => name|300|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
а значит
0.005 / 500
0.001 / 100
0.003 / 300
совершенно не то что нужно.
цитата
12/01/12 в 21:27
Lexikon
мне не нужно сортировать по другим параметрам мне нужно только по третьему. и выводить по мере сортировки, а вывод идет по индексам.
посмотрите как работает это скриптик и как он выводит
<?php
$data = '';
$loc = '';
$file = file('data.txt');
$count = count($file);
for( $i = 1; $i < $count; $i += 1 )
{
$data .= $file[$i].'\n';
}
//echo $data;
$data_n = explode('\n', $data );
function mySort($a, $b) {
$r1 = explode('|', $a);
$r2 = explode('|', $b);
return strcmp($r1[3], $r2[3]);
}
usort($data_n, 'mySort');
//echo $count;
for( $i = 1; $i < $count-1; $i += 1 )
{
$res = explode( "|", $data_n[ $i ] );
$loc .= $res[1].'|';
}
$str = explode("|", $loc);
$n = 0;
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
echo $str[ $n++ ].'<br>';
?>
содержание файла :
flag
name|500|480|0.007|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|350|310|0.005|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|150|500|0.001|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|380|470|0.003|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|990|310|0.008|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|105|540|0.004|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|703|490|0.009|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|550|310|0.002|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
name|600|100|0.006|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
но у него ошибки, а так выдача такая какая должна быть.
цитата
12/01/12 в 21:38
Yacc
Код:
function yacc_sort( $d ) {
$x = array();
$t = array();
foreach( $d as $s ) {
$z = explode( '|', $s );
$x[] = $z[ 2 ];
$t[] = $z[ 3 ];
}
arsort( $t, SORT_NUMERIC );
$y = array();
foreach( $t as $k => $v )
$y[] = $x[ $k ];
return $y;
}
$data = file( __DIR__.'\data.txt' );
unset( $data[ 0 ] );
$result = yacc_sort( $data );
$n = 0;
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
echo $result[ $n++ ].'<br/>';
Результат:
490
310
480
100
310
540
470
310
500
цитата
12/01/12 в 21:48
Lexikon
вот это то что нужно
Спасибо за помощь!
цитата
12/01/12 в 21:55
freeek
Отлично
Стр.
« первая
<
1
,
2
Новая тема
Ответить
Эта страница в полной версии