Сортировка ячеек массива и проверка с записью в файл
|
|
Ilyko96 | Дата: Среда, 28 Декабря 2011, 03:38 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| У меня есть файл test.txt Его содержание примерно такое: Code Apple::25 Alex::58 Rabbit::32 Cucumber::11 Tea::40
Стоит скрипт, который получает данные, отправленные методом GET. Передаются 2 переменные: name и score соответственно. Далее эти две переменнные, точнее переданные значения, надо записать в файл. Но суть в том, что сначала надо проверить, существует ли уже такое значени "name", если да, то больше ли переданное значение того, что уже записано в файле. Если Такой переменной не существует - надо записать в файл новую, если существует, но значение в файле больше переданного - ничего не происходит, а если переданное значение больше записанного, надо заменить на большее.
Использую свои скудные знания в области PHP мне удалось (не без труда и не без гугла) принять значения переменных и записать их в файл. Сделал проверку на наличие такой переменной в файле, но она почему-то не заработала корректно (хотя перед этим делал регистрацию, с записью данных в файл и последующе антиповторной регистрацией)... Ну а если не получилось определить это, то что уж говорить о нахождении большего...
Вторая часть вопроса состоит в выводе всех этих значений в порядке убывания. Я понадеялся на функцию sort(), как оказалось зря... Ничего путного у меня не вышло =((((( Хотя пытался раз 10 =(
Пробовал такие конструкции: foreach(), sort(), if(in_array()) ну и базовые...
Если лень код писать, то можно хотя бы на словах, по какому принципу реализовать выборочную запись в файл и последующую сортировку данных? (как вывести последовательно данные из ячеек массива (нутром чую, будет много массивов =) ) примерно представляю...)
Заранее спасибо всем откликнувшимся, надеюсь не сморозил очередную глупость =)))
МОЙ КАНАЛ
|
|
| |
Йакуд | Дата: Среда, 28 Декабря 2011, 07:34 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Имеется основной массив, скажем $MainArray. Открываешься файл, в цикле читаешь одну строчку, ее Code $arr = explode("::", $arr) . А затем объединяешь с основным.Потом прогоняешь основной массив в цикле и смотришь совпадение с данными в $_GET. Code foreach($MainArray as $i => $val){ if($_GET['name']==$val[0]){ echo "Совпадение найдено!"; } } Сортировку проводишь функцией sort(). Почитай про нее. поиграйся с параметрами. Если хочешь вывести весь массив для теста, то Код не проверял, но примерно так работает..
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
|
|
| |
lvovand | Дата: Среда, 28 Декабря 2011, 07:46 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| лови примерчик, останется только массив в файл записать <?php $handle = fopen("test.txt", "r"); while (!feof($handle)) { $buffer = fgets($handle, 4096); //echo $buffer; if($buffer && strpos($buffer, "::")){ $arr = Array(); $arr = explode("::", $buffer); $aArr[$arr[0]] = $arr[1]; $aNames[] = $arr[0]; } } fclose($handle); print_r($aArr); $name = trim($_GET['name']); $score = intval($_GET['score']); if(!in_array($name, $aNames)){ $aArr[$name] = $score; } elseif(in_array($name, $aNames) && $aArr[$name]<$score){ $aArr[$name] = $score; }
array_multisort($aArr,SORT_DESC); print_r($aArr); ?>
Разработка и продвижение сайтов. Дизайн
Сообщение отредактировал lvovand - Среда, 28 Декабря 2011, 08:38 |
|
| |
Ilyko96 | Дата: Среда, 28 Декабря 2011, 17:33 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| lvovand, ты жесток!!! Я открыл для себя столько новых функций!!! Это просто нечто!!! У меня к тебе будет только одна просьба, если желание не пропало помочь, можешь откомментить что и зачем? Просто вставить уже готовое - дело нехитрое, а вот для себя понять что и зачем - эт уже сложнее.
Йакуд, спасибо! Здесь все куда понятнее, но я так (похоже) пробовал... Сейчас не могу проверить работоспособность, как проверю - отпишусь. Тоже огромное спасибо за помощь!
МОЙ КАНАЛ
|
|
| |
lvovand | Дата: Среда, 28 Декабря 2011, 17:57 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| <?php $handle = fopen("test.txt", "r"); //открыли файл и читаем построчно while (!feof($handle)) { $buffer = fgets($handle, 4096); if($buffer && strpos($buffer, "::")){ //если строка содержит :: разбираем ее $arr = Array(); $arr = explode("::", $buffer); //получаем массив из переменной и значения $aArr[$arr[0]] = $arr[1]; $aNames[] = $arr[0]; //имена переменных закинул в отдельный массив } } fclose($handle); print_r($aArr); //получаем данные из гет-запроса $name = trim($_GET['name']); $score = intval($_GET['score']);
//смотрим есть ли $name в изначальном массиве и если есть, смотрим значение переменной //и либо создаем новое значение в массиве либо обновляем текущее if(!in_array($name, $aNames) || (in_array($name, $aNames) && $aArr[$name]<$score)){ $aArr[$name] = $score; }
//сортировка многомерного массива по убыванию array_multisort($aArr,SORT_DESC); print_r($aArr); ?>
php.su если что в помощь
Разработка и продвижение сайтов. Дизайн
|
|
| |