Просмотр полной версии : Вопрос по функции php
lovepsone
11.05.2011, 20:41
как правильно пишется функция типа :
для каждого (целого числа А) установить b(целая А) = с(целая А)
Где b,с -переменные
Целая А = числа от 1 до 20
Кот ДаWINчи
11.05.2011, 21:36
Где b,с -переменные
$b,$c всё же переменные или массивы?
Например, массив $с задаём так :
$c = array(
1 => '...',
2 => '...',
3 => '...',
4 => '...',
5 => '...',
6 => '...',
7 => '...',
8 => '...',
9 => '...',
10 => '...',
11 => '...',
12 => '...',
13 => '...',
14 => '...',
15 => '...',
16 => '...',
17 => '...',
18 => '...',
19 => '...',
20 => '...');
Массив $b тогда получает значения :
$b[$a] = $c[$a];
если нужно пройти по всему массиву - используй цикл.
ps. (а что, умные книжки про пхп читать "не царское это дело"?)
ах да.... среди ночи я сразу и не допер...
По условию дано:
для каждого (целого числа А) установить b(целая А) = с(целая А)
тогда $b = $c ... и этого будет достаточно. Умный пхп перенесет все значения из массива $с в массив $b ;)
если же в $с значений больше чем 1-20, то тогда - цикл.
lovepsone
11.05.2011, 21:58
а вот что вышло у меня:
$value= (1,2,3,4,5,6,7...20);
foreach ($integer as $value) {$b[$value]=$c[$value]}
я не так уж давно ізучаю пхп и хочу разобраться с функциями
если есть проще вариант то предложите либо исправте меня!
мне нужно чтобы переменная $value проходила по числам от 1 до 20 (новерное так)
то есть вот так
для каждого (целого числа А(от 1 до 20)) установить b(целая А) = с(целая А)
тогда $b = $c ... и этого будет достаточно. Умный пхп перенесет все значения из массива $с в массив $b ;)
если же в $с значений больше чем 1-20, то тогда - цикл.
а если по вашему делать то проще будет наверное так?
$value= (1,2,3,4,5,6,7...20);
foreach ($integer as $value) {$b=$c}
в общем у меня все получилось! спасибо
функция у меня сама выглядит вот так:
$a = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,);
foreach ($a as $val)
{
selectDb('lk');
$sql_text = mysql_query ("SELECT text_loc8 FROM text WHERE id=$val");
$write[$val] = mysql_result ($sql_text,0);
}
Было бы круто если вот эту строку заменить $a = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,);
на типа
$a = array(числа от 1 до 20);
Спасибо Кот ДаWINчи за направленный путь!
Было бы круто если вот эту строку заменить $a = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,);
на типа
$a = array(числа от 1 до 20);
Может быть так:
1.
$a = 0;
while ($a < 20)
{
$a++;
/* работаем с переменной $a */
}
2.
for ($a = 0; $a++ < 20;)
{
/* работаем с переменной $a */
}
lovepsone
13.05.2011, 13:30
Хм..... Спасибо!
Я как раз начал читать про цикл while
получилось вот так:
for ($a = 0; $a++ < 100;)
{
selectDb('lk');
$sql_text = mysql_query ("SELECT text_loc8 FROM text WHERE id=$a");
$write[$a] = mysql_result ($sql_text,0);
}
В дальнейшем тему не закрывайте пожалуйсто. Может еще чего спрошу.
Minimajack
13.05.2011, 13:33
$a = array_keys(array_fill(1,20,0));
lovepsone
13.05.2011, 18:44
$a = array_keys(array_fill(1,20,0));
как то я до этого не додумался! Мне кажется что тут выбор уже по вкусу. Каждый по своему делает.
Кот ДаWINчи
13.05.2011, 19:22
Хм..... Спасибо!
Я как раз начал читать про цикл while
получилось вот так:
for ($a = 0; $a++ < 100;)
{
selectDb('lk');
$sql_text = mysql_query ("SELECT text_loc8 FROM text WHERE id=$a");
$write[$a] = mysql_result ($sql_text,0);
}
В дальнейшем тему не закрывайте пожалуйсто. Может еще чего спрошу.
сколько, сколько там будет запросов к базе? :swoon2::fool:
не проще ли подготовить один критерий отбора и выполнить ОДИН запрос?
$stroka = "(";
for ($a = 0; $a++ < 100;)
{
$stroka = $stroka.$a;
if ($a < 99) $stroka = $stroka.",";
else $stroka = $stroka.")";
}
selectDb('lk');
$sql_text = mysql_query ("SELECT `text_loc8` FROM `text` WHERE `id` IN $stroka");
и далее разбираем получившийся массив
Не стоит так напрягать MYSQL ...
а можно еще хитрее сделать запрос к базе:
$sql_text = mysql_query ("SELECT `text_loc8` FROM `text` WHERE `id` BETWEEN 0 AND 100");
Minimajack
13.05.2011, 22:43
сколько, сколько там будет запросов к базе? :swoon2::fool:
не проще ли подготовить один критерий отбора и выполнить ОДИН запрос?
$stroka = "(";
for ($a = 0; $a++ < 100;)
{
$stroka = $stroka.$a;
if ($a < 99) $stroka = $stroka.",";
else $stroka = $stroka.")";
}
selectDb('lk');
$sql_text = mysql_query ("SELECT `text_loc8` FROM `text` WHERE `id` IN $stroka");
и далее разбираем получившийся массив
Не стоит так напрягать MYSQL ...
а можно еще хитрее сделать запрос к базе:
$sql_text = mysql_query ("SELECT `text_loc8` FROM `text` WHERE `id` BETWEEN 0 AND 100");
первый вариант лучше так:
$stroka = "(";
for ($a = 0; $a++ < 100;){
$stroka .= $a.',';
}
$stroka = rtrim($stroka, ',').')';
selectDb('lk');
$sql_text = mysql_query ("SELECT `text_loc8` FROM `text` WHERE `id` IN $stroka");
Кот ДаWINчи
14.05.2011, 08:02
Minimajack, оптимизировать код можно долго... если rtrim сработает быстрее чем все if-ы, то ты прав.
lovepsone, как видно из кода, это разработка мультиязычного интерфейса для сайта (ЛК). Не проще ли сразу забить все данные в один массив и пользоваться, а не напрягать базу этим?
lovepsone
14.05.2011, 14:28
Может и проще! Я не знаю как будет проще. Мне больше нравится работать с базой. Хотя я понимаю что идет нагрузка на базу. Я еще подумаю над этим.Мне кажется что проще и то и другое.
Добавлено через 4 минуты
сколько, сколько там будет запросов к базе? :swoon2::fool:
не проще ли подготовить один критерий отбора и выполнить ОДИН запрос?
$stroka = "(";
for ($a = 0; $a++ < 100;)
{
$stroka = $stroka.$a;
if ($a < 99) $stroka = $stroka.",";
else $stroka = $stroka.")";
}
selectDb('lk');
$sql_text = mysql_query ("SELECT `text_loc8` FROM `text` WHERE `id` IN $stroka");
и далее разбираем получившийся массив
Не стоит так напрягать MYSQL ...
а можно еще хитрее сделать запрос к базе:
$sql_text = mysql_query ("SELECT `text_loc8` FROM `text` WHERE `id` BETWEEN 0 AND 100");
Хм.... мне это более нравиться решение. Я использую его. спасибо.
Всё бред =) Зачем вообще условия, циклы и тримы, если нам всегда нужны данные с номером до 100? =)
SELECT `text_loc8` FROM `text` WHERE `id` < 100;
Если нужен диапазон - "больше-меньше" все знают как задать и тогда очень хорош вариант с битвином.
lovepsone
15.05.2011, 15:09
а если мне допустим нужно выкинуть какое-то число к примеру 1! как тогда сдесь поступить ??
Lordronn
15.05.2011, 15:15
SELECT `text_loc8` FROM `text` WHERE `id` < 100 AND `id` != 1;
lovepsone
15.05.2011, 15:18
Мда.... мне еще учиться и учиться.
Ну или если несколько выкинуть.
SELECT `text_loc8` FROM `text` WHERE `id` < 100 AND `id` NOT IN(1,5,6) ;
lovepsone
20.05.2011, 23:42
возможно реализовать такую фишку:
if (условия)
{
ждать три секунды
}
Minimajack
20.05.2011, 23:53
http://php.net/manual/en/function.sleep.php
lovepsone
29.06.2011, 15:06
Люди помогите в какую сторону копать.
Хочу написать скрипт который будет выполнять sql запрос каждый день
На винде в сторону планировщика задач, иначе в сторону cron.
Кот ДаWINчи
29.06.2011, 16:28
на хостинге - cron
на виндовом сервере - планировщик заданий
------------------------
под виндой можно еще свою утилитку написать на дельфи, которая будет работать как планировщик заданий.
Minimajack
29.06.2011, 21:31
windows http://www.nncron.ru/index_ru.shtml
linux cron
HuntsMan
11.08.2011, 00:09
Есть такая проблема. Имеется енум с некоторыми значениями. Имеется абстрактный класс и туча наследуемых от него. Имена наследуемых классов совпадают с именами из енума. Можно ли как-то создавать объект нужного класса, используя значение числа из нкоторой переменной. Насколько я помню в шарпе это позволяла какая-то функция активатора, а есть ли аналог для php?
Minimajack
11.08.2011, 00:25
давайте начнем с того, что в пхп нет енумов...
если вы имеете в виду массив имен переменных(классов) - то как то так:
$myclass = $myenum [$var];
$mynewclass = $myclass();
HuntsMan
11.08.2011, 00:51
Ладно, тогда дефайнов. Я хочу что-то в духе:
defined(CLASS_1, 0);
class CLASS_1 { ...};
$object = GetClass(CLASS_1);
При это геткласс не возвращает объект из массива, а создает новый соотв класса.
пардон за синтаксис, пишу с телефона.
Minimajack
11.08.2011, 00:59
только если
define(CLASS_1, "CLASS_1");
function GetClass($name){
return $name()
}
дополню, предыдущий вариант и не возвращал класс из массива...он возвращал имя класса
зы имхо если вы этого хотите у вас явно проблемы с архитектурой приложения
lovepsone
03.12.2011, 12:05
Привет всем! Далее я обучаюсь в пхп и пишу свой движок и наткнулся на одну проблему, суть ее ниже постараюсь объяснить:
пример:
В базе в mysql у меня содержится ссылка modul=settings .
Когда я перехожу на сайте по ссылке /index.php?modul=settings
у меня должен загрузиться пхп-файл с помощью команды require_once
То есть у меня должна быть проверка с помощью $GET.
Но в базе mysql может содержаться не одна ссылка а несколько ссылок в одно поле к примеру вот так modul=settings/r/nmodul=forum/r/n
То есть функция должна отловить ссылку и проверить есть ли такая ссылка в базе mysql. Если есть то возвращаем значение иначе не возвращаем.
Жду хоть какой то помощи.
(Сверху был пример, а у меня в движке дело обстоит так: У меня содержатся панели (по середине, справа, и слева) и все они вызываются в одном файле index.php и показываются на всех страницах сайта, а мне нужно что бы они показывались не на всех,а показывались на тех которые не находятся в базе)
Есть идеи как такое реализовать ???
Кот ДаWINчи
03.12.2011, 16:09
третий код говорит о том, что ссылки свалены в одно поле!? :swoon:
lovepsone
03.12.2011, 16:13
третий код говорит о том, что ссылки свалены в одно поле!? :swoon:
да так и есть!
Я когда только начинал разбираться в пхп, то такую фишку видел на каком то движке но не помню!
Кот ДаWINчи
03.12.2011, 16:44
это ни есть айс. Это бред ужасный.... Это как при помощи пулемета с полным боезапасом убивать врагов, тупо махая им, как дубиной.
lovepsone
03.12.2011, 16:53
ну а как бы вы посоветовали ???
хотя почему не айс???? если с базы доставать и заносить в массив с помощью explode()! разбивая ссылки и удаляя символы /r/n! Вроде как гуд! но я не могу придумать как отловить ссылку, если бы было к примеру обычная ссылка! index.php/nodule/и т.д то было бы проще! А у меня как в вашем ACP сделано, то есть есть модульность! Просто мне пока не хватает знаний, а может я велосипед изобретаю!
Кот ДаWINчи
03.12.2011, 20:25
под каждую ссылку свою запись - вот решение проблемы.
Но без структуры таблиц о чем то серьезном говорить "не с руки".
lovepsone
03.12.2011, 20:32
CREATE TABLE `wcf_settings` (
`settings_name` varchar(200) collate utf8_unicode_ci NOT NULL default '',
`settings_value` text collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`settings_name`)
Кот ДаWINчи
03.12.2011, 20:43
ключевое поле длиной 200 символов? Ужас...
Зато влезет вся хрень. =)))
Ну про explode() ты прав, а дальше остаётся разбивать и разбивать :)
$stroki = explode("/r/n", "modul=settings/r/nmodul=forum/r/n");
foreach ($stroki as $stroka)
{
if (empty($stroka)) break;
$arr = explode("=", $stroka);
if ($arr[1] == 'settings') {
// тут что-то с настройками
} elseif ($arr[1] == 'forum') {
// тут что-то с форумом
}
}
Если modul много будет, можно через switch ... case сделать
Кот ДаWINчи
04.12.2011, 09:00
тогда для размышления выдам такую ситуацию:
Вам нужно заменить один модуль на другой. в поле 20 ссылок, а меняем ... ну например 11-ю... т.е. скрипту надо считать это поле разбить на 20 ссылок , заменить 11-ю далее собрать поле обратно и сохранить в базе.
еще одна ситуация:
У модуля в параметрах ссылки хранится значение содержащее "/r/n" ...
Так что, для нормальной работы лучше избегать такие многоссылочные поля.
Извините за слайтли оффтопик, но словами сантехника пришедшего в обком: "тут всю систему менять надо". :(
1. Невозможно писать систему безграмотно. Не существует слова "modul". Чуток поднатаскаешься в "инглишском изыке", глаз резать начнет, опечатываться сам же будешь. А пакетная замена уже может и не прокатить, так как вполне возможно, что появятся всякие "modul_n" или там "n_modul".
2. Ссылки вида "mysite.ru/index.php?modul=settings" - полный отстой. Крайне рекомендуется в движок сразу закладывать обработку ссылок в формат "mysite.ru/settings/" - причем без использования реврайта, все в РНР делать.
3. Выше уже упоминали, что если с базы доставать и заносить в массив с помощью explode()! разбивая ссылки и удаляя символы /r/n! Вроде как гуд! это совсем не гуд, а вовсе даже и бед. И бред. На какого хрена делать (помянем старый мангос) аналог поля "data"? Зафига в одно поле вводить пицод ссылок, при чтении разбивать их там куда-то зачем-то, рисковать из-за одного неверного знака все грохнуть напрочь, и в итоге даже и самому перестать разбираться в формате записи в этом поле - просто позабыв через пару месяцев принцип его формирования? одна строка - одно значение, и не хрена городить. Надо массив сделать - всю таблицу сгрызть.
Короче, либо я чего-то не понимаю, либо я вообще ничего не понимаю.
Minimajack
07.12.2011, 22:09
Крайне рекомендуется в движок сразу закладывать обработку ссылок в формат "mysite.ru/settings/" - причем без использования реврайта, все в РНР делать.
Уточнение, могут неправильно понять :
Все равно без реврайта не обойтись :pardon: (редиректить на главный скрипт все равно необходимо - 3 строки htaccess), а все остальное обязательно уже пхп ( так называемый роутинг - и очень желательно хранить "это" не в базе)
Со всем остальным согласен полностью
vBulletin® v3.8.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot