[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Массивы в РНР
Вадим
Привет) У меня такая проблема!
Файл содержит информацию об автомобилях в виде: номерной знак, марка авто, модель, год выпуска, стоимость, пробег, фамилия и имя владельца.

Файл:

CE1367AB BMW 5Series $50000 2009р. 15000тис Робуляк Дмитро
CE4654AА Chery Amulet $1000 2008р. 8000тис Ревуцький Дмитро
CE6522AМ Lada 2106 $4000 2004р. 15000тис Кравецький Степан
CE4356ЕА Opel Kadett $3000 1980р. 200000тис Филипчук Саша
CE2034АВ Lada 2105 $2000 1992p. 92000тис Драганюк Вадим

1) Вывести все автомобили упорядочены по возрастанию стоимости и вычислить количество различных марок автомобилей, встречающихся в файле.
2) В форму вводится набор символов. Вывести в окно браузера все автомобили, фамилии владельцев которых содержат заданные символы.

Помогите советом, или кодом)))




Спустя 1 час, 18 минут, 46 секунд (2.04.2011 - 16:49) Вадим написал(а):
первое задание надо выполнить используя массивы, второе используя строки!

Вопрос в том, как разбить этот файл в массив элементов, чтобы потом можно было обратиться к элементу "стоимость" и сравнить с последующим элементом в следующей строке? Мне получается только разбить файл на массив строк, а еще надо строку разбить на массив элементов и проверять.
PHP:
<?php

$auto = fopen("\home\localhost\www\phpsite\auto.txt", "a+");
if (!$auto){
echo "Error"."</body></html>";
exit;
}

while(!feof($auto)){
$mas = fgetcsv($auto," ");
$num = count ($mas);


for ($i=0; $i<$num; $i++)
{
$mas2=explode(" ", $mas[$i]);
echo "$mas2[3]<br>";
}
}



fclose($auto);

?>

Спустя 33 минуты (2.04.2011 - 17:22) sebastjan написал(а):
Придумал мароку, используй базу, всё будет граздо поще.
Захоел вывел одно, захотел отсортировал.

Спустя 2 часа, 9 минут, 45 секунд (2.04.2011 - 19:32) Вадим написал(а):
Так в этом и задание) Чтоб именно с файла!

Спустя 2 минуты, 30 секунд (2.04.2011 - 19:34) quickxyan написал(а):
Цитата (sebastjan @ 2.04.2011 - 14:22)
Придумал мароку, используй базу, всё будет граздо поще.
Захоел вывел одно, захотел отсортировал.


угу, говоришь преподу или работодателю на собеседовании типа вы что нахер файлы давайте через БД, и догадайся что они ответят. )

Спустя 9 минут, 37 секунд (2.04.2011 - 19:44) Вадим написал(а):
Хорош совет)

Спустя 2 часа, 40 минут, 38 секунд (2.04.2011 - 22:24) KonstantinK написал(а):
Вадим Считывай содержимое файла функцией file() она вернет тебе массив строк файла. После разбивай каждый элемент массива по пробелу(как ты и делал) , ну и там уже манипулируй данными как хочешь, тем более что там в каждой строке одинаковое количество элементов, а значит и сравнивать будет легко.

Спустя 23 часа, 5 минут, 5 секунд (3.04.2011 - 21:29) sebastjan написал(а):
Это хорошо если в строках одинакоеколичество элементов а если нет ?
Один вопрос в том как формируеться логика сохранеия этих данных.
А другой вопрос ка их выводить.
На мой взгляд если подходить изначально ,надо всё таки продумать как именно данные сохранять.
Ну а если это для препода ,так конечно ,как и писали выше, сравнивать элементы в масиве.
Как там, вроде пять ключевых элементов в строке.





Спустя 51 минута, 7 секунд (3.04.2011 - 22:21) KonstantinK написал(а):
Цитата
Ну а если это для препода

Судя по всему да. Поэтому и такое решение предложено. А по людски конечно все в бд и спокойно работай smile.gif

Спустя 11 минут, 57 секунд (3.04.2011 - 22:33) Snus написал(а):
Вадим
Тебе нужно использовать функции
1. file
2. explode
3. usort
4. strpos
5. foreach

Спустя 1 час, 51 минута, 59 секунд (4.04.2011 - 00:25) Guest написал(а):
Цитата (KonstantinK @ 2.04.2011 - 19:24)
Вадим Считывай содержимое файла функцией file() она вернет тебе массив строк файла. После разбивай каждый элемент массива по пробелу(как ты и делал) , ну и там уже манипулируй данными как хочешь, тем более что там в каждой строке одинаковое количество элементов, а значит и сравнивать будет легко.


while(!feof($auto)){
$mas = file($auto);
$num = count ($mas);


for ($i=0; $i<$num; $i++)
{
$mas2=explode(" ", $mas[$i]);
$mas[3]=usort($mas2);
//echo "$mas2[3]<br>";
echo "$mas<br>";

}

}


Так??? Не получаеться((( Ошыбки виносит((( Подправте где напутал ПЛИЗ!

Спустя 7 минут, 36 секунд (4.04.2011 - 00:32) RAZZOR написал(а):
Мне бросилось в глаза только вот это:
echo  "$mas<br>";
. Что же ты массив эхом то выводишь? Это вроде как будет Array возвращать. Используй print_r, а если нужно, чтобы выводило красиво, то забубень через foreach

Спустя 10 часов, 52 минуты, 45 секунд (4.04.2011 - 11:25) KonstantinK написал(а):
Вадим
А какие ошибки что не можешь сказать?

Но вот тут
$auto = file("\home\localhost\www\phpsite\auto.txt");
мы получаем уже готовый массив $auto где элеметы строки файла 'auto.txt'
а дальше можешь перебрать массив $auto к примеру так
$temp_arr = array();
foreach($auto as $val)
$temp_arr[] = explode(" ", $val);


получаем многомерный массив $temp_arr - это то что мы ищем.

Спустя 40 минут, 12 секунд (4.04.2011 - 12:05) Guest написал(а):
while(!feof($auto)){
$mas = fgetcsv($auto," ");
$num = count ($mas);


for ($i=0; $i<$num; $i++)
{
$mas2=explode(" ", $mas[$i]);
$mas=usort($mas2);
//echo "$mas2[3]<br>";
foreach($mas as $key=>$value)
echo $value."<br>";

}

}


Все роботает кроме сортировки! $mas=usort($mas2); - выводит ошыбку ! Может не правильно пишу???

Спустя 56 минут, 9 секунд (4.04.2011 - 13:01) Guest написал(а):
С первым заданием справился:
$auto = fopen("\home\localhost\www\phpsite\auto.txt", "a+");
if (!$auto){
echo "Error"."</body></html>";
exit;

}
function funk($x, $y)
{
$arr1=explode(" ", $x);
$arr2=explode(" ", $y);
if($arr1[3]>$arr2[3]) return 1;
else if($arr1[3]<$arr2[3]) return -1;
return 0;
}

$mas = file("\home\localhost\www\phpsite\auto.txt");

$num = count ($mas);
usort($mas, "funk");
$mas2= array();


for ($i=0; $i<$num; $i++)
{

echo $mas[$i]."<br/>";

$t=explode(" ", $mas[$i]);
$mas2[$i]=$t[2];

}

$a=array_count_values($mas2);
echo count($a);


fclose($auto);

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.