Бесплатные PHP скрипты - форум техподдержки

Бесплатные PHP скрипты - форум техподдержки

Форум техподдержки WR-Скриптов на php. Обсуждаем: основы программирования на PHP 5 - 7 версий, различные подходы к написанию скриптов на php 7 без MySQL. А также WR-скрипты: бесплатные доски объявлений, скрипты форумов, Гостевые книги, Каталог ссылок, Галерея, Фотоальбом, Счётчики, Рассылки, Анекдот и другие. Принимаются пожелания для новых версий. Сообщите какой скрипт нужен для Вашего сайта, постараемся найти или реализовать. Скачать скрипты можно бесплатно. Вместе мы сделаем бесплатные php скрипты лучше и доступнее!

Главная сайта бесплатных php скриптовГлавная сайта   ПоискПоиск  
Сегодня: 29.03.2024 - 10:46:11
Страницы:  1  

PHP цикл, беда!

Объявление - WR-Scriptы в UTF-8 кодировке

Активно обновляю скрипты и перевожу их в UTF-8 кодировку. Список перекодированных php скриптов доступен на главной странице сайта. Скачивайте скрипты и устанавливайте на свой сайт! В ближайшее время обновлю каталог знакомств, форум Про, фотоальбом, доски объявлений лайт и ЛЮКС.

На форуме, пожалуйста, пишите что модернизировать в скриптах в первую очередь. Постараюсь исправить большую часть пожеланий!
Планирую продолжить работы весь 2023 год.

АвторСообщение

srazil

S
Участник форума

День добрый всем!
Вот проблема такого характера:
1. есть папки их названия это даты 2010-08-01, 2010-08-02 и т.д.
2. в них по несколько файлов (примерно 2-4 файла) имя у всех уникальное тк по мимо этих файлов есть еще файлы но они не нужны, файлы примерно так выглядят 56452_pitanie.dat
3. В файле такая информация: наименование|цена|количество
Вот как это выглядит:
завтрак|70|3
обед|75|3
ужин|50|3
Нужно подсчитать кол-во всех завтраков, обедов и ужинов
Вот листинг кода:

Код:


$dirs = read_dir_or_file('stolovaya','dirs'); // Это функция выясняет какие названия папок есть в папке stolovaya (они все вот так называются 2010-08-01, 2010-08-02 и тд)

foreach($dirs as $dir) {
$price=file('stolovaya/'.$dir.'/stolovaya_base.dat'); // в этом файле лежат ключи к каждому файлу _pitanie.dat

foreach($price as $line)
{
$line=trim($line);
$expl=explode("|",$line);
// в $expl[9] содержится так называемый Уникальный ключ $expl[9]_pitanie.dat

$hapok=file('data/settings/modules/hotel/'.$dir.'/'.$expl[9].'_pitanie.dat');
foreach($hapok as $li)
{
$li=trim($li);
$exp=explode("|",$li);
echo "$exp[0]<br />";
}
}
}

Бьюсь уже пару дней, пока понял своим умом, что нужно из цикла выйти и не потерять массив, а как не могу понять.
Он мне принтит столько на экран, сколько есть файлов в этих папках

вот как выглядит функция чтения файлов или папок

Код:

function read_dir_or_file($directory,$dir_file) {
$path = opendir($directory);
while(false !== ($file = readdir($path))) {
if(($file != '.') && ($file != '..')) {
if(is_file($directory.'/'.$file)) {
$files[] = $file;
}
elseif(is_dir($directory.'/'.$file)) {
$dirs[] = $file;
}
}
}
closedir($path);
if($dir_file == 'files') {
return $files;
}
if($dir_file == 'dirs') {
return $dirs;
}
}

Сообщение # 1 17.08.10 - 22:34:22

WR

W
Участник форума

в самом верху кода обнулить 3 счётчика (для подсчёта завтраков, обедов и ужинов).
где идёт выдача на экран: echo "$exp[0]<br />";
добавить условие по принципу: если $exp[0]=="завтрак" счётчик=счётчик+1;

вот и всё

Сообщение # 2 18.08.10 - 06:40:57

srazil

S
Участник форума

А вот, что содержит $expl[0]
Завтрак
Обед
Ужин
Конечно было бы здорово ели он содержал только завтрак!

Сообщение # 3 18.08.10 - 09:06:59

srazil

S
Участник форума


Цитата:

srazil пишет:
А вот, что содержит $expl[0]
Завтрак
Обед
Ужин
Конечно было бы здорово ели он содержал только завтрак!


Все проблему решил но по другому, спасибо.
так:

Код:

if(file_exists('stolovaya/'.$dir.'/'.$expl[9].'_pitanie.dat')) {
$lin = file('stolovaya/'.$dir.'/'.$expl[9].'_pitanie.dat');
$in=count($lin); $in_i="0";
do {$xpl = explode("|", $lin[$in_i]); $in_i++;
$num_nomer=count($xpl);

if ($xpl[0] == "Завтрак") {$zavtr = $zavtr+$xpl[2];}
if ($xpl[0] == "Обед") {$obedov = $obedov+$xpl[2];}
if ($xpl[0] == "Ужин") {$uzinov = $uzinov+$xpl[2];}
} while ($in_i<$in);}

Вот примерно так, вроде работает.

Сообщение # 4 18.08.10 - 21:54:15

srazil

S
Участник форума

Эти циклы, это что то, кто уже их оседлал помогите:
Сравнивает файлы.
Первый с базой (он один!)
И следующие с чем сравнить и если есть одинаковые то жирным селект сделать
вот почти рабочий код

Код:


<?php

$path = 'asd';
$numer=file('number.dat');

//for($n=0;$n<count($numer);$n++)$numer[$n]=trim($numer[$n]);

$dir_handle = @opendir($path) or die("Unable to open $path. Check if it's readable.");


while ($dir = readdir($dir_handle)) {
if($dir == '.' || $dir == '..')
continue;
echo "<select name=\"qwerty\" class=\"qwerty\">
<option value=\"\" selected=\"selected\"> - Выберите -</option>";
$nix1=file(''.$path.'/'.$dir.'/base.dat');


foreach($nix1 as $linem)
{
$linem=trim($linem);
$explm=explode("|",$linem);
$nix[]=$explm[0];
}


foreach($numer as $linems)
{
$linems=trim($linems);
$ex=explode("|",$linems);
if (in_array($linems,$nix)) {

echo"<option style='font-weight:bold' value='$linems'> - $linems -$explm[1] </option>"; }
else {echo"<option value='$linems'> - $linems- </option>";}
}

echo "</select>";
}


closedir($dir_handle);
?>

У меня в трех папких эти файлы, и селекта тоже три! А нада один! Как это сделать?
В файле почти рабочий пример.

Прикреплён файл: options.zip (0.1 Мб.)
Сообщение # 5 18.08.10 - 23:14:57

srazil

S
Участник форума

Пробовал еще так :

Код:


<?php //////////////////////////////////////////////////////////////////////////////////////
//Define path
$path = 'asd';
$cv_dir=file('number.dat');

//Open the folder
$dir_handle = @opendir($path) or die("Unable to open $path. Check if it's readable.");

//Loop through dirs
while ($dir = readdir($dir_handle)) {
if($dir == '.' || $dir == '..')
continue;
echo "<select name=\"qwerty\" class=\"qwerty\">
<option value=\"\" selected=\"selected\"> - Выберите -</option>";
$nix1=file(''.$path.'/'.$dir.'/base.dat');

foreach(array($nix1) as $cv_dir)
{foreach($cv_dir as $cv_file)
{echo "<option value=\"$cv_dir\\$cv_file\">$cv_dir - $cv_file</option>";

}

}

echo "</select>";
}

//Close
closedir($dir_handle);
////////////////////////////////////////////////////////////////////////////////////////// ?>


Но все тоже самое.

Сообщение # 6 23.08.10 - 19:43:15

srazil

S
Участник форума

Пробовал еще так, но он теперь начал по несколько раз в одном селекте выдавать базу т.е. вместо 10 пунктов селекта выдает 10 умноженное на 3 селектов. Но хоть начал жирным выделять то с чем сравнивать.
Вот пример:

Код:


<?php //////////////////////////////////////////////////////////////////////////////////////
//Define path
$path = 'asd';
//Open the folder
$dir_handle = @opendir($path) or die("Unable to open $path. Check if it's readable.");
echo "<select name=\"qwerty\" class=\"qwerty\">
<option value=\"\" selected=\"selected\"> - Выберите -</option>";
//Loop through dirs
while ($dir = readdir($dir_handle)) {
if($dir == '.' || $dir == '..')
continue;
/////////////////////////////// Беда началась
$nix=file(''.$path.'/'.$dir.'/base.dat'); // Что сравнивать ($dir содержит множество папок в которых находятся base.dat)
$im=0;

foreach($nix as $linem)
{
$linem=trim($linem);
$explm=explode("|",$linem);
$im++;

$numer=file('number.dat'); // С чем сравнивать

$ims=0;
foreach($numer as $linems)
{
$linems=trim($linems);
$explms=explode("|",$linems);
$num_nomer=count($explms);
$x_nomer=0-1;
while ($x_nomer++<$num_nomer) {
if ($x_nomer==$num_nomer) break;
if ($explm[0]==$explms[$x_nomer]) {echo"<option style='font-weight:bold' value='$explms[$x_nomer]'> - $explms[$x_nomer] - </option>";} else {
echo"<option value='$explms[$x_nomer]'> - $explms[$x_nomer] - </option>";}
$ims++; }
}

///////////////////////////// Беда закончилась!
}

}
echo "</select>";
//Close
closedir($dir_handle);
////////////////////////////////////////////////////////////////////////////////////////// ?>

Вот пример моих неудач:

Прикреплён файл: numer.zip (0.1 Мб.)
Сообщение # 7 24.08.10 - 11:12:49
JavaScript динамическое добавление поля :Предыдущая темаСледующая тема: Регестрация + сохранение даных в текстовый файл
Страницы:  1  

Сообщение
Имя E-mail
Сообщение

Нажмите на точку возле имени для обращения к участнику

Смайлы:

Ещё смайлы
Эмодзи
         
Защитный код: (введите цифры, которые на синем фоне)
Ответ на вопрос: (Какой сейчас год?)
   
WR-Счётчик
Powered by WR-Forum Professional © 2.3 UTF-8 beta версия