[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP работа с файлами
Гость_novi4ok
Создать типизированный файл toys, содержащий сведения об игрушках (10 записей): указывается название игрушки (например, кукла, кубики, мяч, конструктор), её стоимость в гривнах и возрастные границы детей, для которых игрушка предназначена (например, для детей от двух до пяти лет). Узнать цену самого дорогого конструктора;

не понимаю как делать,а сдавать нужно(
Помогите пожалуйста! очень буду благодарна!
Игорь_Vasinsky
в файл пиши в подобном виде - построчно.
строка - игрушка

название | цена | возраст
медведь плюшевый | 12 | 3-8

прочитал построчно файл в массив

отобрал все элементы содержащие конструктор

отсортировал по цене

file()
substr_count
explode
сортировка

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
novi4ok15
$figr=fopen("igra.txt", 'r'); //открываю файл
$array = file("igra.txt"); //прочитала построчно в массив
echo substr_count($array, 'конструктор') ;
$ar = explode(" ", $array);

посмотрите пожалуйста и помогите а как дальше делать?
выходят ошибки
Warning: substr_count() expects parameter 1 to be string, array given in C:\xampp\htdocs\file\8.php on line 14

Warning: explode() expects parameter 2 to be string, array given in C:\xampp\htdocs\file\8.php on line 15
Игорь_Vasinsky
fopen не нужно, ты же file() используешь

file() - получить весь файл в массив, каждая строка - 1 элемент массива

посмотри

echo '<pre>' . print_r(file('file.txt')) . '</pre>';


далее - тебе нужно получить все строки(элементы) с "конструктор"

тут много вариантов, вплоть до array_map() и прочее, но я тебе, как начинаюшему - предлагаю поработать с массивом в обыычном цикле foreach


//Создадим пустой массив для всех эл-в содерж-х конструктор

$need = array()

foreach($array as $el)
{
//если элемент содержит конструктор (substr_count())
//Получим из строки массив

$temp =explode('|', $el);

$need[] = array('name'=>$temp[0], 'price'=>$temp[1], 'years'=>$temp[2]);
}


и глянь

echo '<pre>' . print_r($need, 1) . '</pre>';


а далее array_multisort по price и нужные параметры при сортировке

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
novi4ok15
Спасибо большое,почти всё получилось,только я не могу разобраться с сортировкой!
Надо чтобы сначала выводил самый дорогой конструктор,а выводит вот так:
Array
(
[0] => Array
(
[name] => мяч
[price] => 6
[years] => 3-10

)

[1] => Array
(
[name] => медведь плюшевый
[price] => 12
[years] => 3-8

)

[2] => Array
(
[name] => кукла маша
[price] => 10
[years] => 2-3

)

[3] => Array
(
[name] => конструктор лего
[price] => 15
[years] => 12-16

)

[4] => Array
(
[name] => конструктор барби
[price] => 14
[years] => 2-5
)

)
Может я в коде что то не так написала
$array = file('igra.txt'); //прочитала построчно в массив
echo '<pre>' . print_r(file('igra.txt')) . '</pre>';
$need = array() ;
foreach($array as $el)
{
substr_count($el, 'конструктор') ;
$temp =explode('|', $el);
$count_array = array_count_values($array);
$need[] = array('name'=>$temp[0], 'price'=>$temp[1], 'years'=>$temp[2]);
}
echo '<pre>' . print_r($need, 1) . '</pre>';
array_multisort ($need,SORT_DESC,$array);
echo '<pre>' . print_r($need, 1) . '</pre>';
Игорь_Vasinsky
Цитата
foreach($array as $el)
{
substr_count($el, 'конструктор') ;
$temp =explode('|', $el);
$count_array = array_count_values($array);
$need[] = array('name'=>$temp[0], 'price'=>$temp[1], 'years'=>$temp[2]);
}

ты же не отсеиваешь ничего

foreach($array as $el)
{
if(substr_count($el, 'конструктор')>0){
....
}
}


Цитата
array_count_values

это для чего вообще?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
novi4ok15

Цитата
array_count_values ошибочно из другой работы написала
Спасибо,я поняла ошибку,но сортировка непраильно работает,нужно же именно по цене отсортировать,а получается что по названию сортирует
Игорь_Vasinsky
для этого нужно почитать про array_multisort() и глянуть примеры.
есть готовые варианты - сортировка многомерного массива.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
novi4ok15
Спасибо Вам большое,в мне очень помогли)
у меня еще проблема,но уже с другим заданием:Сформировать матрицу размером NxM. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в верхнем левом углу.
Пыталась написать,но не работает,не подскажете в чем тут ошибки

$i=0; $j=0;
$n=$num1;
$m=$num2;
$a=array ();

for($i = 1; $i <= $n; $i++)
{
for($j = 1; $j<=$m;$j++)
{
$a[$i][$j]=rand(-1,10);
if (($i=1) and ($j=1))
{
$max=$a[$i][$j];
$tempi=1;
$tempj=1;
}

if ($a[$i][$j]>$max)
{
$max=$a[$i][$j];
$tempi=$i;
$tempj=$j;
}
echo 'максимальный элемент это'; $a(',$tempi,',',$tempj,',$max);

if ($temp<>1)
{
for($j = 1; $j<=$m;$j++)
{
$temp=$a[$tempi][$j] ;
$a[$temp][$j]=$a[1][$j];
$a[1][$j]=$temp;
}
if ($temp<>1)
{
for($i=1;$i<=$n;$i++)
{
$temp=$a[i][1] ;
$a[$i][1]=$a[$i][$tempj];
$a[$i][$tempj]=$temp;
}
for($i=1;$i<=$n;$i++)
{
for($j=1;$j<=$m;$j++) { print ($a[$i][$j]);}
}
}
}
}
}

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

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