Вторник, 05 Ноября 2024, 22:44

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Сортировка ячеек массива и проверка с записью в файл
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)
. А затем объединяешь с основным.
Code
$MainArray[] = $arr;
Потом прогоняешь основной массив в цикле и смотришь совпадение с данными в $_GET.
Code
foreach($MainArray as $i => $val){
   if($_GET['name']==$val[0]){
     echo "Совпадение найдено!";
   }
}

Сортировку проводишь функцией sort(). Почитай про нее. поиграйся с параметрами. Если хочешь вывести весь массив для теста, то
Code
print_r($MainArray);

Код не проверял, но примерно так работает..


"Хороший художник – копирует, гениальный – ворует!" — 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 если что в помощь


Разработка и продвижение сайтов. Дизайн
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг