Реклама на сайте Advertise with us

Сортировка строковых данных

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 18:10       Ответить с цитатойцитата 

freeek писал:
а можно весь код, как ты используешь, если весь массив видишь, и с индексами там все в порядке, то ошибки нет, Notice: Undefined offset такая ерунда вылазит, когда типа нет проверки на существование того или иного индекса в массиве


Код: [развернуть]

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 12/01/12 в 18:12       Ответить с цитатойцитата 

и вообще. вы товарищи написали уже тут десятки строк кода. нашли у друг друга ошибки. а мой вариант в 1 строку...
давайте еще 3 раза код поправьте, допишите еще 30 строк. чтобы отсортировать циферки по убыванию trollface.png smail101.gif

пришел к победе коммунистического труда

6
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 12/01/12 в 18:16       Ответить с цитатойцитата 

Yacc писал:
Потому что массив в пхп - это хэш-таблица, а индексы последней, как известно должны быть уникальны. icon_smile.gif


это понятно что в php массивы это хэш таблицы, я про это и спрашивал, что часть данных может похериться если сами строки, которые мы пытаемся сравнить, буду идентичны. но мне кажется, тут может вопрос встать как раз таки наоборот, чтобы все строки на вывод были уникальными. а так да.

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 12/01/12 в 18:18       Ответить с цитатойцитата 

FXIX писал:
вообще в кусок кода отвечающий за сортировку - не надо подмешивать логику работы с 10гиговыми файлами.

В кусок кода отвечающий за сортировку - не надо подмешивать вообще никакую логику. В этом смысле мой вариант самый кошерный. icon_smile.gif

6
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 12/01/12 в 18:19       Ответить с цитатойцитата 

Lexikon писал:
Код: [развернуть]


там другая функция,

Код:
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);
}


к замечаниям нужно отметить, что в массиве останутся только уникальные отсортированные строки

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 18:29       Ответить с цитатойцитата 

Ладненько, всем спасибо, оценил.
Буду изучать ибо ничего не понял что куда и как icon_mad.gif
функции, функции smail101.gif
а куда их встатить чет я полный ноль icon_sad.gif
Попробовал все коды, но то ошибка то не работает. Но это се по незнанке момей нужно изучать матчасть. icon_rolleyes.gif

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 12/01/12 в 18:38       Ответить с цитатойцитата 

Lexikon писал:
Попробовал все коды,

Я тоже, всё работает. icon_smile.gif

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 18:50       Ответить с цитатойцитата 

да я то не сомневаюсь что оно работает, просто по своей малознаемости не особо соображаю что и куда вставить, функция есть, а как прикрутить это все к файлу с данными несоображу. icon_confused.gif
Вот даже этот код :
Код: [развернуть]

содержание файла
Код: [развернуть]


Сортировка происходит но:
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
в чем ошибка х.з

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 12/01/12 в 19:35       Ответить с цитатойцитата 

Yacc писал:
В кусок кода отвечающий за сортировку - не надо подмешивать вообще никакую логику. В этом смысле мой вариант самый кошерный. icon_smile.gif

вы человека мучаете едрен-батон. он нихера не понял smail101.gif

freeek писал:
это понятно что в php массивы это хэш таблицы, я про это и спрашивал, что часть данных может похериться если сами строки, которые мы пытаемся сравнить, буду идентичны. но мне кажется, тут может вопрос встать как раз таки наоборот, чтобы все строки на вывод были уникальными. а так да.


дубликаты целиком строк убираются вот так:
$file= array_values(array_unique($file));

а тут пытаемся сравнить строки по одному(N3) из ряда параметров
name|N1|N2|N3|...

и по этому параметру похерятся разные строки.

пришел к победе коммунистического труда

6
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 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' );


icon_smile.gif

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 19:51       Ответить с цитатойцитата 

Просто потом мне нужно делать вставки
<?php echo $str[ $n++ ]; ?>
А как я понял то что сам масив сортируется это ясно, но вот если я буду делать вставки на странице
<?php echo $str[ $n++ ]; ?> - тут должно быть первое значение
<?php echo $str[ $n++ ]; ?> - тут должно быть второе значение
<?php echo $str[ $n++ ]; ?> - тут должно быть третье значение
а оно так не получается, только в моем коде все как нужно, но там ошибки и х.з. сделал вывод что проще заплатить за скрипт ибо разобраться с ошибками не получилось.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 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++ ];

...

6
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 12/01/12 в 19:59       Ответить с цитатойцитата 

FXIX писал:
вы человека мучаете едрен-батон. он нихера не понял smail101.gif



дубликаты целиком строк убираются вот так:
$file= array_values(array_unique($file));

а тут пытаемся сравнить строки по одному(N3) из ряда параметров
name|N1|N2|N3|...

и по этому параметру похерятся разные строки.


внимательно посмотри мою функцию?))

что я там делаю, собственно по этому поводу возникло замечание у Yacc, в php массивы это хеш таблицы и если в моем случае строки совпадут, тот останется только одна из них.

сама сортировка идет по Ni параметру и тут проблем нет, проблема в том, что уже тот массив который я сортирую будет иметь только уникальные ключи - наши строки.

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 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
и так до конца

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 20:19       Ответить с цитатойцитата 

Поэтому я и сортирую по третьему значению (по убыванию),
парсю этот масив и вывожу первое значение.

А у вас получается по индексам и соответственно

$n = 0;

echo $result[ $n++ ];
echo $result[ $n++ ];
echo $result[ $n++ ];

выводит все не в том порядке в котором отсортировано, а по индексам.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 12/01/12 в 20:34       Ответить с цитатойцитата 



так тебе после сортировки, надо вывести какой то параметр только из строки?

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 20:47       Ответить с цитатойцитата 

из строк
сколько echo $result[ $n++ ]; столько и выводов

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 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 );

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 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
совершенно не то что нужно.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 21:27       Ответить с цитатойцитата 

мне не нужно сортировать по другим параметрам мне нужно только по третьему. и выводить по мере сортировки, а вывод идет по индексам.
посмотрите как работает это скриптик и как он выводит

Код: [развернуть]


содержание файла :

Код: [развернуть]


но у него ошибки, а так выдача такая какая должна быть.

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

0
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 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

6
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 12/01/12 в 21:48       Ответить с цитатойцитата 

smail54.gif
вот это то что нужно
Спасибо за помощь!

Push Траф для Арбитража : Раз | Два
Есть СНГ траф? Лей сюда!

1
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 12/01/12 в 21:55       Ответить с цитатойцитата 

Отлично smail04.gif

6
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »