a|2
b|9
c|4
d|12
e|7
Нужно его перезаписать на самого себя но данные выстроить по убыванию значений после '|' Тоесть так:
d|12
b|9
e|7
c|4
a|2
Подскажите пожалуйста, как можно это сделать.
Спасибо.
Спустя 1 час, 8 минут, 12 секунд (2.03.2009 - 11:05) kirik написал(а):
Алгоритм:
1. Считываешь построчно файл (через file())
2. Разбиваешь каждую строку через разделитель "|" и записываешь в ассоциативный массив вида array('a' => '2', 'b' => '9'..) (explode() и for).
3. Сортируешь массив через ф-ю arsort() (желательно с флагом SORT_NUMERIC)
4. Для каждого элемента массива соединяешь ключ и значение через "|"
4.а Создаешь массив с соединенными значениями и implode'ишь через \n
4.б "Конкатенируешь" в одну строку в процессе соединения ключа и значения.
5. Пишешь обратно в файл
ЗЫ. Кодом получилось бы короче, но так как это в форуме "PHP основы" - попробуй написать сам
1. Считываешь построчно файл (через file())
2. Разбиваешь каждую строку через разделитель "|" и записываешь в ассоциативный массив вида array('a' => '2', 'b' => '9'..) (explode() и for).
3. Сортируешь массив через ф-ю arsort() (желательно с флагом SORT_NUMERIC)
4. Для каждого элемента массива соединяешь ключ и значение через "|"
4.а Создаешь массив с соединенными значениями и implode'ишь через \n
4.б "Конкатенируешь" в одну строку в процессе соединения ключа и значения.
5. Пишешь обратно в файл
ЗЫ. Кодом получилось бы короче, но так как это в форуме "PHP основы" - попробуй написать сам

Спустя 10 минут, 40 секунд (2.03.2009 - 11:16) Alchemist написал(а):
Небольшая поправка:
функция rsort() сбрасывает старые ключи, при описаном алгоритме лучше пользоваться функцией arsort()
функция rsort() сбрасывает старые ключи, при описаном алгоритме лучше пользоваться функцией arsort()
Спустя 16 минут, 12 секунд (2.03.2009 - 11:32) kirik написал(а):
Цитата (Alchemist @ 2.03.2009 - 03:16) |
функция rsort() сбрасывает старые ключи, при описаном алгоритме лучше пользоваться функцией arsort() |
моя ошибка, спасибо!

Спустя 4 часа, 30 минут, 23 секунды (2.03.2009 - 16:03) brdm написал(а):
Спасибо. В общих чертах вроде понятно, но..
file.dat...(тот-же, что в теме)
$popularr = file("file.dat");
// подсчет количества элементов массива
$pcount = count($popularr);
for($i = 0; $i < $pcount; $i++)
{
$rpopul[$i]=explode("|",$popularr[$i]);
дальше.. не доходит
}
Подскажите please как дальше.
Вообще не совсем понятно, как из file.dat составить ассоциативный массив (что значит ассоциативный?). Дальше вроде справлюсь.
Сппасибо.
file.dat...(тот-же, что в теме)
$popularr = file("file.dat");
// подсчет количества элементов массива
$pcount = count($popularr);
for($i = 0; $i < $pcount; $i++)
{
$rpopul[$i]=explode("|",$popularr[$i]);
дальше.. не доходит
}
Подскажите please как дальше.
Вообще не совсем понятно, как из file.dat составить ассоциативный массив (что значит ассоциативный?). Дальше вроде справлюсь.
Сппасибо.
Спустя 4 часа, 40 минут, 59 секунд (2.03.2009 - 20:44) kirik написал(а):
Цитата (brdm @ 2.03.2009 - 08:03) |
Подскажите please как дальше. |
PHP |
<?php |
Цитата (brdm @ 2.03.2009 - 08:03) |
что значит ассоциативный? |
Ассоциативный массив, это массив в роли ключей которого могут выступать любые значения (строки).
Спустя 2 часа, 28 минут, 46 секунд (2.03.2009 - 23:12) brdm написал(а):
Большое спасибо.
Все получилось.
Все получилось.
Спустя 1 год, 10 месяцев, 10 дней, 16 часов, 15 минут, 37 секунд (13.01.2011 - 15:28) air написал(а):
А если в строке данных больше и нужно отсортировать по второму "столбцу" все данные в файле?
Спустя 18 минут, 12 секунд (13.01.2011 - 15:46) Snus написал(а):
air
Соответственно, сортировка меняется в функции cmp. Все вполне интуитивно.
файл test.txt
На выходе
Соответственно, сортировка меняется в функции cmp. Все вполне интуитивно.
<?php
function cmp($a, $b){
return strcmp($a['val1'], $b['val1']);
};
$file = 'test.txt';
$arr = array();
$handle = fopen($file, 'r');
if($handle){
while (!feof($handle)) {
list($val1, $val2) = explode('|', fgets($handle, 8192));
if(!empty($val1) and !empty($val2))
$arr[] = compact('val1', 'val2');
}
fclose($handle);
} else die('Не могу открыть файло');
usort($arr, 'cmp');
echo '<pre>';
print_r($arr);
echo '</pre>';
?>
файл test.txt
d|5
a|8
c|2
e|7
На выходе
Array
(
[0] => Array
(
[val1] => a
[val2] => 8
)
[1] => Array
(
[val1] => c
[val2] => 2
)
[2] => Array
(
[val1] => d
[val2] => 5
)
[3] => Array
(
[val1] => e
[val2] => 7
)
)
Спустя 1 день, 6 часов, 19 минут, 47 секунд (14.01.2011 - 22:06) Guest написал(а):
Если файл test.txt такой:
1234567890|b|2|q|
1234567891|d|9|w|
1234567892|c|4|e|
1234567893|a|12|r|
1234567894|d|7|t|
Вообще надо отсортировать по алфавиту второго столбца, но если значения совпадают, сортируется по третьему. Если и там совпадают, по четвёртому. Больше не надо.
Должно получиться:
1234567893|a|12|r|
1234567890|b|2|q|
1234567892|c|4|e|
1234567894|d|7|t|
1234567891|d|9|w|
Ну и записать обратно в файл результат желательно.
Честно говоря, ничего путного кроме этой темы не нашёл.
1234567890|b|2|q|
1234567891|d|9|w|
1234567892|c|4|e|
1234567893|a|12|r|
1234567894|d|7|t|
Вообще надо отсортировать по алфавиту второго столбца, но если значения совпадают, сортируется по третьему. Если и там совпадают, по четвёртому. Больше не надо.
Должно получиться:
1234567893|a|12|r|
1234567890|b|2|q|
1234567892|c|4|e|
1234567894|d|7|t|
1234567891|d|9|w|
Ну и записать обратно в файл результат желательно.
Честно говоря, ничего путного кроме этой темы не нашёл.
Спустя 4 дня, 46 минут, 5 секунд (18.01.2011 - 22:52) air написал(а):
Видимо, проблема... Когда в строке много данных, не получается.