Показати повну версію : Ротация переменных на PHP
Вот задачка для школьника, но чет с бодунища ничего не приходит в голову.
Есть две, три переменых:
$one = "Привет";
$two = "Пока";
И есть переменная вывода $out к-рая используется дальше в скрипте.
Вопрос: как переменной $out присваивать значения выше указанных переменных по очереди?
Вопрос: как переменной $out присваивать значения выше указанных переменных по очереди?
Заноси входящие данные в массив, типа:
//инициализация
$array_in = array();
$one = "Привет";
$array_in[0] = $one;
$two = "Пока";
$array_in[1] = $two;
//вывод данных
foreach( $array_in as $key=>$value )
{
$out = $array_in[$key];
echo $out;
}
alexusaty
21.03.2009, 22:57
Vasek, а что это сработает при более чем одном проходе массива?
По-моему проще так:
//init
$one = "Привет";
$two = "Пока";
$out = $one;
function sel_out(&$string)
{
if ($string == $one) {$string = $two} else {$String = $one}
};
$ii = 0;
while ($ii < 10)
{
sel_out($out);
echo $out\n;
inc($ii);
}
ИМХО. Просто порграммировать доводилось последний раз несколько лет назад......
а что это сработает при более чем одном проходе массива?
в массиве наращивается индекс, я показал условно, поставь переменную в индекс и инкрементируй её, вот и всё.
alexusaty, пляшем от постановки задачи. Чем проще тем надёжнее. Я еси чес, вообще не могу дать совета при таком скудном кол-ве исходных данных. Это я так по простому ляпанул. Если нужно решить проблему, то обычно дают или ТЗ или обширное описание, ну типа откуда ноги растут и чего нужно получить, как то так ;)
Vasek, это в vBulletin будет ротация двух баннеров.
для vBulletin вроде есть ротатор банеров Power Banner Manager
Vasek, чет как-то не особо работает
http://www.jpm.com.ua/1.php
alexusaty, <?
//init
$one = "Привет";
$two = "Пока";
$out = $one;
function sel_out(&$string)
{
if ($string == $one)
{
$string = $two;
}
else {
$String = $one;
}
}
$ii = 0;
while ($ii < 10)
{
sel_out($out);
echo "$out\n";
inc($ii);
}
?>
В итоге Fatal error: Call to undefined function: inc() in /home/jpmcom/public_html/2.php on line 24
alexusaty
23.03.2009, 00:28
inc($ii);
Сорри, это простой инкремент. Должно быть
$ii++;
Путаю с паскалем. Говорил ведь что уже давненько не программировал.
alexusaty, а вот работа твоего скрипта :)
http://www.jpm.com.ua/2.php
alexusaty
23.03.2009, 21:27
abez,
<?php
$one = "Привет";
$two = "Пока";
$out = $one;
function sel_out(&$sel_var, $one, $two)
{
if ($sel_var == $one)
{
$sel_var = $two;
}
else {
$sel_var = $one;
}
}
$ii = 0;
while ($ii < 10)
{
sel_out($out,$one,$two);
echo "$out\n";
$ii++;
}
?>
Вот так работает. Грубо конечно, но работает. Не знаю точно как в php работать с глобальными переменными. Приходится передавать их функции в качестве параметров. А со $string пропарочка вышла. Забыл что такой тип бывает. Если бы язык был более строгий, типа паскаля, обязательно выдал бы синтаксическую ошибку. А в php анархия полная.
alexusaty, мммм, с того же бодунища забыл уточнить.
Смена должна происходить при обновлении страницы :)
вот самый, самый простой варик: использование JS - смотреть (http://bsk.zp.ua/testscript/index.html) , без обновления страницы крутит нужное кол-во баннеров, статически прописываешь скорость обновления, сырцы имиджей и урлы линков. нет только статистики кликов ;)
исходник тут (http://bsk.zp.ua/testscript/index.rar)
alexusaty
23.03.2009, 21:59
для ротации при обновлении страницы записывай состояние в cookie.
Vasek, джаву не хотелось :(
alexusaty, куки тоже :) Наверное уже проще через MySql.
А рандондомным ротатором можно обойтись ?
Крутить теже две переменные и присваивать значние $out ?
Если нет, то буду привязыватся к времени. До обеда показывать один баннер, после обеда другой.
прогуглил, есть штук 5 openGL php/mysql ротаторов с админкой. Статистика, время показов и т.д.
Vasek, наворачивать vBulletin сторонними скриптами, опять же не хочу, я не планирую отчитыватся перед заказчиком.
У меня все статически, одна страница, один баннер :) Но тут заказчик сделал мне подставу, но отказыватся не хочу, клиент перспективный.
alexusaty
23.03.2009, 22:10
abez, Ну рандомный ротатор в принципе выход. Если выбирать один из двух.....
alexusaty, а накидать есть возможность ?
Я анализировать чужое и видоизменять умею, но писать с нуля - баран :)
Если не затруднит, конечно, если тяжко, то уже с утра полезу в гугл.
$arr = array();
$arr[0] = "ONE";
$arr[1] = "TWO";
$out = $arr[rand(0,1)];
echo $out;
alexusaty
23.03.2009, 23:10
abez,
<?php
//инициализация
$array_in = array();
$one = "Url_1";
$array_in[0] = $one;
$two = "Url_2";
$array_in[1] = $two;
$three = "Url_3";
$array_in[2] = $three;
//вывод данных
$ii=0;
while( $ii < 10 )
{
$out = $array_in[rand(0,2)];
echo "$out\n";
$ii++;
}
?>
Васек был ближе к истине когда отвечал на твой первый вопрос. Поэтому я только дополнил его скрипт. А с куками проблем никаких - почитай в описании языка как писать в куки и читать оттуда. Это все в описании сеансов. Там буквально пара-тройка функций. С рандомным ротатором получается чем больше баннеров тем лучше он работает. С двумяя поэкспериментировал - получается много повторений подряд. Клиенту может не понравиться. К тому же всегда лучше встраивать в свою работу универсальные решения, которые работают не только в частном случае дву-трех баннеров. На мой взгляд лучше будет воспользоваться куками или на крайняк mysql. хотя mysql будет тормозить загрузку страницы и увеличивает загрузку сервера.
Vasek, alexusaty, - "друзи, з мене РогАнь" :)
Кароче, должен ;)
С рандомным ротатором получается чем больше баннеров тем лучше он работает. С двумяя поэкспериментировал - получается много повторений подряд.
Сойдет. Уже если надо будет больше, буду прикручивать какой-то скрипт управления.
alexusaty
24.03.2009, 21:43
abez, "друзи, з мене РогАнь"
В Мигее встретимся и разопьем обязательно.
alexusaty, заметано, тему закрываю!
vBulletin версії 3.8.11, © 2000-2026, Jelsoft Enterprises Ltd.
Переклад: © Віталій Стопчанський, 2004-2010