Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 18:10 |
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];
|
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 12/01/12 в 18:12 |
и вообще. вы товарищи написали уже тут десятки строк кода. нашли у друг друга ошибки. а мой вариант в 1 строку...
давайте еще 3 раза код поправьте, допишите еще 30 строк. чтобы отсортировать циферки по убыванию
|
|
пришел к победе коммунистического труда
|
6
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 12/01/12 в 18:16 |
Yacc писал: | Потому что массив в пхп - это хэш-таблица, а индексы последней, как известно должны быть уникальны. |
это понятно что в php массивы это хэш таблицы, я про это и спрашивал, что часть данных может похериться если сами строки, которые мы пытаемся сравнить, буду идентичны. но мне кажется, тут может вопрос встать как раз таки наоборот, чтобы все строки на вывод были уникальными. а так да.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 12/01/12 в 18:18 |
FXIX писал: | вообще в кусок кода отвечающий за сортировку - не надо подмешивать логику работы с 10гиговыми файлами. |
В кусок кода отвечающий за сортировку - не надо подмешивать вообще никакую логику. В этом смысле мой вариант самый кошерный.
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 12/01/12 в 18:19 |
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);
} |
к замечаниям нужно отметить, что в массиве останутся только уникальные отсортированные строки
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 18:29 |
Ладненько, всем спасибо, оценил.
Буду изучать ибо ничего не понял что куда и как
функции, функции
а куда их встатить чет я полный ноль
Попробовал все коды, но то ошибка то не работает. Но это се по незнанке момей нужно изучать матчасть.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 12/01/12 в 18:38 |
Lexikon писал: | Попробовал все коды, |
Я тоже, всё работает.
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 18:50 |
да я то не сомневаюсь что оно работает, просто по своей малознаемости не особо соображаю что и куда вставить, функция есть, а как прикрутить это все к файлу с данными несоображу.
Вот даже этот код :
Код: [развернуть] |
<?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
в чем ошибка х.з
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 12/01/12 в 19:35 |
Yacc писал: | В кусок кода отвечающий за сортировку - не надо подмешивать вообще никакую логику. В этом смысле мой вариант самый кошерный. |
вы человека мучаете едрен-батон. он нихера не понял
freeek писал: | это понятно что в php массивы это хэш таблицы, я про это и спрашивал, что часть данных может похериться если сами строки, которые мы пытаемся сравнить, буду идентичны. но мне кажется, тут может вопрос встать как раз таки наоборот, чтобы все строки на вывод были уникальными. а так да. |
дубликаты целиком строк убираются вот так:
$file= array_values(array_unique($file));
а тут пытаемся сравнить строки по одному(N3) из ряда параметров
name|N1|N2|N3|...
и по этому параметру похерятся разные строки.
|
|
пришел к победе коммунистического труда
|
6
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 12/01/12 в 19:37 |
Файл 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' ); |
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 19:51 |
Просто потом мне нужно делать вставки
<?php echo $str[ $n++ ]; ?>
А как я понял то что сам масив сортируется это ясно, но вот если я буду делать вставки на странице
<?php echo $str[ $n++ ]; ?> - тут должно быть первое значение
<?php echo $str[ $n++ ]; ?> - тут должно быть второе значение
<?php echo $str[ $n++ ]; ?> - тут должно быть третье значение
а оно так не получается, только в моем коде все как нужно, но там ошибки и х.з. сделал вывод что проще заплатить за скрипт ибо разобраться с ошибками не получилось.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 12/01/12 в 19:57 |
Lexikon писал: | потом мне нужно делать вставки
<?php echo $str[ $n++ ]; ?> |
Код: | ...
$result = yacc_sort( $data, 4 );
...
$n = 0;
echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];
... |
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 12/01/12 в 19:59 |
FXIX писал: | вы человека мучаете едрен-батон. он нихера не понял
дубликаты целиком строк убираются вот так:
$file= array_values(array_unique($file));
а тут пытаемся сравнить строки по одному(N3) из ряда параметров
name|N1|N2|N3|...
и по этому параметру похерятся разные строки. |
внимательно посмотри мою функцию?))
что я там делаю, собственно по этому поводу возникло замечание у Yacc, в php массивы это хеш таблицы и если в моем случае строки совпадут, тот останется только одна из них.
сама сортировка идет по Ni параметру и тут проблем нет, проблема в том, что уже тот массив который я сортирую будет иметь только уникальные ключи - наши строки.
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 20:15 |
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
и так до конца
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 20:19 |
Поэтому я и сортирую по третьему значению (по убыванию),
парсю этот масив и вывожу первое значение.
А у вас получается по индексам и соответственно
$n = 0;
echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];
выводит все не в том порядке в котором отсортировано, а по индексам.
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 12/01/12 в 20:34 |
так тебе после сортировки, надо вывести какой то параметр только из строки?
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 20:47 |
из строк
сколько echo $result[ $n++ ]; столько и выводов
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 12/01/12 в 20:53 |
Код: | 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 ); |
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 21:26 |
так как ни сортируй индекс не меняется
$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
совершенно не то что нужно.
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 21:27 |
мне не нужно сортировать по другим параметрам мне нужно только по третьему. и выводить по мере сортировки, а вывод идет по индексам.
посмотрите как работает это скриптик и как он выводит
Код: [развернуть] |
<?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| |
но у него ошибки, а так выдача такая какая должна быть.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 12/01/12 в 21:38 |
Код: | 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
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 12/01/12 в 21:48 |
вот это то что нужно
Спасибо за помощь!
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 12/01/12 в 21:55 |
Отлично
|
|
|
|