Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   замена значения элемента массива другим значением элемента.. (http://forum.oszone.net/showthread.php?t=31190)

MXM 19-05-2004 17:45 213929

Всем привет!
Ситуация:
Есть форма (низподающая меню), из которой выбирается интересующая позиция, данные по позициям берутся php-скриптом из текстового файла. В данном случае низподающая меню - выбор марок автомобилей. Выбрав интересующую марку пользователь кликает на Ok, далее данные передаются скрипту, который обрабатывает их и выводит ему, из другой тектовой базы, все авто соответсвующей данной марки.
Текстовые базы данных.
Код:


(1-ая база, marks.txt, для низподающей меню), вид:
...
22;Mini;
23;Cadillac;
24;Lincoln;
...
(2-ая база, cars.txt), вид:
...
29;2;Murano
28;3;Endeavor;
27;23;Escalade
26;23;SRX
...

Связанны эти базы так: во 2-ой базе, 1-ый индекс равен 0-му индексу 1-ой базы, т.е.
Код:

$cars[1]=$marks[0];
Проблема:
При выводе пользователю инфы по интересующей марке 1-ый индекс (2-ой базы) не заменяется на 0-ой индекс (1-ой базы).
К примеру, переменная, которая передаются из формы скрипту $mark, значение этой переменной 23, т.е. пользователю в браузере отображется так:
Код:

23 Escalade
23 SRX

, а должно быть:
Код:

Cadillac Escalade
Cadillac SRX

"Код в студию":
Код:

$fp=fopen("data/marks.txt","r");
$marks=array();
$i=0;
while(!feof($fp))
{$marks[$i]=fgets($fp,10000);
 $i++;}
fclose($fp);
 
$fp=fopen("data/cars.txt","r");
$cars=array();
$i=0;
while(!feof($fp))
{$str=" ";
 $cars[$i]=fgets($fp,10000);
 $pt=explode(";",$cars[$i]);
 for($j=0;$j<count($marks);$j++)
 {$mpt=explode(";",$marks[$j]);
 *if($pt[1]==$mpt[0])
 *{$pt[1]=$mpt[1];
 * break;}}
// $cars[$i]=implode(";",$pt);
 $str=$str.";";
 $cars[$i]=$str.$cars[$i];
 $i++;}
fclose($fp);
 
sort($cars);
$ncars=count($cars);
 
$ndcars=array();
$counter=0;
for($i=0;$i<$ncars;$i++)
{$pt=explode(";",$cars[$i]);
 if($pt[2]==$mark)
 {$ndcars[$counter]=$cars[$i];
 *$counter++;}}
 
$ncars=count($ndcars);
 print "Всего авто - $ncars<br>";
 
for($i=0;$i<$ncars;$i++)
{$pt=explode(";",$ndcars[$i]);
 $id=$pt[1];
 $mark=$pt[2];
 $art=$pt[3];
 print "$mark $art<br>";}

Строку, которую я закомментировал, как раз она, если не ошибаюсь, отвечает за замену, но если её раскомментировать, то на экране ничего не отобразится...(
Вопрос:
В чём может быть причина? Что я делаю не так? Как это делается? Заранее спасибо!

Prisoner 20-05-2004 06:50 213930

Мне нравится ваш стиль описания проблемы - мои респекты!
Теперь ближе к делу.
1) Мне также кажется странным способ организации данных - зачем во второй таблице первый (нулевой в сложившейся терминологии) индекс? Это id авто? Тогда лады, если нет - зачем он? Хотя он возможно не используется...
2) Зачем такой громоздкий скрипт? Представьте себе процесс передачи данных от посетителя к скрипту и вам станет ясно, что легче написать функцию которая по выбранной марке (ее номеру) сообщит все, что вам покажется необходимым сообщить (ведь во втором файле можно разместить не только названия авто, но и их другие характеристики). Например из описанной вами задачи получается нечто такое (разумеется без проверки данных и всего такого прочего):
Код:

function GetAvtos($Mark)
  {
   $Out = '';
   $Cars  = file('data/cars.txt');

   foreach ($Cars as $Car)
     {
      $CarInfo = explode (';', $Car);
      if ($CarInfo[1] == $Mark)
        $Out .= $CarInfo[1].' '.$CarInfo[2].'<br>';
     }
   return $Out;
  }

Вызывать можно так или просто в какую-либо переменную для последующего вывода.
Код:

echo (GetAvtos(23));
А можно изменить саму функцию, если оно необходимо...

Кстати, в php есть такая функция как
Цитата:

Цитата php manual
fgetcsv - получает строку из указателя файла и разбирает её на CSV-поля.



Время: 11:31.

Время: 11:31.
© OSzone.net 2001-