Войти

Показать полную графическую версию : замена значения элемента массива другим значением элемента..


MXM
19-05-2004, 17:45
Всем привет!
Ситуация:
Есть форма (низподающая меню), из которой выбирается интересующая позиция, данные по позициям берутся 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
Мне нравится ваш стиль описания проблемы - мои респекты!
Теперь ближе к делу.
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 есть такая функция как fgetcsv - получает строку из указателя файла и разбирает её на CSV-поля.




© OSzone.net 2001-2012