|
|
|
| здравствуйте уважаемые форумчане !
<?
$test = array('1','2','3','4'); //допустим есть такой массив
function test(TestArray) {
foreach(TestArray as $value ) { $result .= $value; } // перебор происходит по 1 элементу массива цикл равен 4 итерациям
return $result ;
}
$string = test($test) ;
?>
|
у меня последнее время часто возникает ситуация когда нужно перебрать массив не по 1 элементу а сразу по нескольким то есть
если массив состоит из 7 элементов значит перебор должен осуществляться 1 раз сразу по 7 элементам . Подскажите пожалуйста как это реализовать ! | |
|
|
|
|
|
|
|
для: artart
(19.03.2013 в 03:23)
| | что в вашем понимании перебор?
значения нужно соединить? | |
|
|
|
|
|
|
|
для: artart
(19.03.2013 в 03:23)
| | напишите что хотите получить на выходе | |
|
|
|
|
|
|
|
для: artart
(19.03.2013 в 03:23)
| | TestArray - будет воспринято как константа, чего у вас нет, а значит это ошибка. Должно быть: $TestArray - объявленная переменная.
$result .= $value; - это ошибка, так как $result не объявлена ранее.
Все это заменяется одной php-функцией:
<?
$test = array('1','2','3','4');
echo implode($test);
|
| |
|
|
|
|
|
|
|
для: confirm
(19.03.2013 в 12:32)
| | >$result .= $value; - это ошибка, так как $result не объявлена ранее.
это скорее предвестник ошибки. Хотя, спорить не буду, что инициализировать переменную надо | |
|
|
|
|
|
|
|
для: Igorek
(19.03.2013 в 13:15)
| | да, не критично, но лучше объявлять | |
|
|
|
|
|
|
|
для: confirm
(19.03.2013 в 12:32)
| | про эту функцию я отлично знаю я не много не так обьяснил мне нужно чтобы в теле цикла я мог выполнять любые операции над элементами массива разом то есть не по одному элементу а по всем. А на счет переменных советую делать поменьше глобальных во избежание путаницы !
если я не ошибаюсь то функция implode() клеит массив и возвращает строку но мне надо что то вроде этого
<?
foreach($test sa $value) { $value+1;это первый элемент $value+5; это второй элемент $value+5+(100*3);это третий элемент }
?>
|
| |
|
|
|
|
|
|
|
для: artart
(19.03.2013 в 21:43)
| | у вас что-то не в порядке с логикой приложения, раз у вас возникают такие вопросы | |
|
|
|
|
|
|
|
для: Valick
(19.03.2013 в 21:58)
| | я не просил меня учить логике, просто если можете то подскажите - я же не советую вам на питон перейти! | |
|
|
|
|
|
|
|
для: artart
(19.03.2013 в 22:08)
| |
у меня последнее время часто возникает ситуация
|
у вас что-то не в порядке с логикой приложения
|
____
я не просил меня учить логике
|
а я не спрашивал у вас как мне отвечать на вопросы форума | |
|
|
|
|
|
|
|
для: Valick
(19.03.2013 в 22:26)
| | я не в коем случае не хотел вам грубить просто у меня такая ситуация столкнулся я с cms joomla
сами разработчики мне очень понравились все у них правильно и хорошо, но те кто пишет под
этот движок а точнее код их просто не четабельный в результате доработка каких приложений ,
написанных не самими разработчиками joomla, очень изнурительный процес поэтому я решил написать
собственную среду разработки у которой первая задача быть очень легко дорабатываемой ну я не буду вдаваться в подробности как только соберу все в кучу так обязательно выложу на все общее обозрение поэтому я прошу конкретно помочь если можете ! | |
|
|
|
|
|
|
|
для: artart
(19.03.2013 в 22:50)
| |
<?
$test = array('1','2','3','4',5,6,7,8,9,0,'1','2','3','4',5,6,7,8,9,0); //допустим есть такой массив
$count = (integer)count($test)/7;
for($i=0;$i<$count;$i++){
echo $test[$i+0].' ';
echo $test[$i+1].' ';
echo $test[$i+2].' ';
echo $test[$i+3].' ';
echo $test[$i+4].' ';
echo $test[$i+5].' ';
echo $test[$i+6].' ';
echo '<br>';
}
$ostatok = count($test)%7; // Колличество оставшихся ключей(с конца) которых не хватило на пачку из 7 элементов
|
P.S. У джумулы плохая архитектура и написана она плохо.
P.P.S. Ваша задача - простейший алгоритм. Но лучше при добавлении элементов сразу же делить на нужные блоки
P.P.P.S. Я подозреваю, что вам просто надо ограничить колличество элементов в линии, лучше всего это делать версткой, но если програмно, то при простом переборе проверять на остаток деления( оператор % ) И если он равен 0, то делать новую строчку | |
|
|
|
|
|
|
|
для: CrazyAngel
(20.03.2013 в 09:31)
| | вместо $i++, можно использовать $i=$i+7 | |
|
|
|
|
|
|
|
для: Valick
(20.03.2013 в 10:14)
| | Тогда придется проверять каждую переменную, так как в конце можно легко выйти за пределы массива | |
|
|
|
|
|
|
|
для: CrazyAngel
(20.03.2013 в 10:50)
| | так и в Вашем примере та же проблема. | |
|
|
|
|
|
|
|
для: Lotanaen
(20.03.2013 в 11:04)
| | У меня как раз нет, так как я сначала ищу целое колличество блоков (по 7 в каждой), а потом их перебираю. В конце я показал как получить последние элементы, которых не хватило чтоб собрать 7. | |
|
|
|
|
|
|
|
для: CrazyAngel
(20.03.2013 в 11:31)
| | ограничить $i<$count; до числа кратного 7 не проблема
да и при следующей итерации условие даже $i<$count; не пройдет, и останутся всего лишь нетронутые ключи массива остатка, никакого выхода за пределы не произойдет | |
|
|
|
|
|
|
|
для: Valick
(20.03.2013 в 11:34)
| | Упустил на скорую руку. конечно же
echo $test[$i*7+0].' ';
echo $test[$i*7+1].' ';
echo $test[$i*7+2].' ';
echo $test[$i*7+3].' ';
echo $test[$i*7+4].' ';
echo $test[$i*7+5].' ';
echo $test[$i*7+6].' ';
|
| |
|
|
|
|
|
|
|
для: CrazyAngel
(20.03.2013 в 09:31)
| | >P.S. У джумулы плохая архитектура и написана она плохо.
и сколько вы просидели над исходниками джумлы, чтобы это понять? | |
|
|
|
|
|
|
|
для: psychomc
(21.03.2013 в 13:02)
| | Делал и дорабатывал около 7-8 сайтов на этой системе. | |
|
|
|
|
|
|
|
для: CrazyAngel
(21.03.2013 в 22:42)
| | ясно. но что конкретно вам не понравилось? может быть кривые руки были у тех, кто на ней делал свои сайты? и, вполне вероятно, вам тоже нужно было не брать в руки напильник, а читать документацию и использовать какие-то встроенные возможности. я конечно не спец в joomla, но ее популярность меня заставляет думать, что всё там не так плохо. | |
|
|
|
|
|
|
|
для: psychomc
(21.03.2013 в 23:17)
| | Ее популярность из-за того, что она старая, и в свое время сильно рекламировалась. А сделана она была, когда бесплатных более-менее CMS не было по сути. | |
|
|
|
|
|
|
|
для: CrazyAngel
(21.03.2013 в 23:45)
| | ну а с архитектурой то что не так? вроде ж уже и mvc появилось | |
|
|
|
|
|
|
|
для: CrazyAngel
(21.03.2013 в 23:45)
| | del | |
|
|
|
|
|
|
|
для: artart
(19.03.2013 в 21:43)
| | И как вы себе это представляете - разом?
Представьте, что вам нужно окрасить забор. Сможете ли вы выкрасить кисточкой все его штакетники разом? | |
|
|
|
|
|
|
|
для: confirm
(20.03.2013 в 05:03)
| | Ну выкрасить разом можно, взяв палку подлиннее и привязав к ней кисточки на определенном расстоянии, но для этого надо знать смещение относительно ведущей кисти.
Выглядеть это будет достаточно странно и качество покраски оставит желать лучшего.
Может даже быть маляр за такую "инициативу" распрощается с работодателем.
___
ТС не предоставил четкой информации по поводу смещения, и подозреваю определенных параметров нет. Функций для работы с массивами достаточно много. Но судя по той информации которую предоставил ТС, налицо ошибка в логике. | |
|
|
|
|
|
|
|
для: Valick
(20.03.2013 в 10:12)
| | А речь разве о нескольких кисточках? Да и забор понятие "длинное", если ли смысл вязать кисточки? Суть не в кисточках, а в действиях.
Вместо кисточек напишите на бумаге три цифры и мысленно сложите их. После этого опишите процесс своего мышления - и как вы складывали?
На языке еще можно написать "желание все сразу", типа implode(',', array), и эта запись выглядит как "единым махом", но только выглядит, а вот обращаться придется к каждому элементу массива все равно. Даже если и получить все элементы как память ими занимаемую, то чтобы вставить между ними символ нужно еще переместиться по необходимому смещению. Но даже имея возможность переместившись скопом во все нужные места, нельзя будет выполнить эту операцию, так как первая же вставка будет сдвигать элементы, причем каждый третий на единицу больше.
И если даже выдумать шустрый интерпретатор могущий "сразу", то это так бы и осталось его "желанием", так как команды в процессоре не обрабатываются сразу, сперва нужно получить байт, узнать сколько байт команда занимает, выполнить ее, а по смещению от длины команды получить следующую, и так далее. Точно также получают элементы массива, а не все скопом. Так что ваша палка с кисточками, это просто пустая трата энергии. | |
|
|
|
|
|
|
|
для: confirm
(20.03.2013 в 11:14)
| | у вас как с адекватным восприятием окружающего пространства?
вы привели пример, а привел вариант решения и написал в качестве резюме
Выглядеть это будет достаточно странно и качество покраски оставит желать лучшего.
Может даже быть маляр за такую "инициативу" распрощается с работодателем.
на что вы мне отвечаете
Так что ваша палка с кисточками, это просто пустая трата энергии.
___
я говорю "белое", вы мне отвечаете, "нет - это белое"...
на что я должен в свою очередь следуя логике возразить " вы не правы - это белое" | |
|
|
|
|
|
|
|
для: Valick
(20.03.2013 в 11:38)
| | У меня все нормально с восприятием. А вот вы не понимаете, что даже штакетницы забора это отдельные элементы. | |
|
|
|
|
|
|
|
для: confirm
(20.03.2013 в 11:47)
| | Вы неисправимы :)
Перестаньте считать, что окружающий мир на порядок глупее чем вы.
Забор может быть и бетонный, так что со штакетником вы как-то "в молоко" :)
но речь не об этом... | |
|
|
|
|
|
|
|
для: Valick
(20.03.2013 в 11:49)
| | Во-первых я не считаю кого-то глупее, это только ваши домыслы.
Во-вторых, человеку (в данном случае автору темы) надо задумываться над тем, что он излагает, и покрасить забор одной кисточкой было предложено ему.
Не кипишитесь напрасно, это также не рационально как и вязать к палке кисти, потому как красить таким чудом будет очень неудобно. Но вы же можете красить как вам угодно. Это вас устроит?
. | |
|
|
|
|
|
|
|
для: confirm
(20.03.2013 в 11:57)
| |
<?
//вот это я думаю будет вам интересно
$name = array('ВАСЯ','петя','рома'); // 1 тип данных
$password = array('123','87654321','root111'); // 2 тип данных
$test = array('{name}' => $name,'{pass}' => $password);// 3 тип данных
$string = 'Ваше имя {name},а это Ваш пароль {pass}'; // 4 тип данных
//функция на вход должна принимать 2 аргумента из выше перечисленных - 3 тип данных и 4 тип данных
// на выходе должно получиться 3 результата
//1 результат 'Ваше имя ВАСЯ,а это Ваш пароль 123'
//2 результат 'Ваше имя петя,а это Ваш пароль 87654321'
//3 результат 'Ваше имя рома,а это Ваш пароль root111'
?>
|
P.S ну очень буду благодарен за помощь в решении этой задачи заранее спасибо | |
|
|
|
|
|
|
|
для: artart
(21.03.2013 в 05:45)
| | 3 тип данных, 4 тип данных - это не данные, это набор глупостей.
Вы ведь думали о чем-то когда писали это, а теперь опишите словами свои мысли - чего вы планировали и ожидаете от этих записей? | |
|
|
|
|
|
|
|
для: confirm
(21.03.2013 в 06:46)
| | Это исходные данные, и считать их глупостью - глупость) надо работать с тем, что есть, а вопрос был не об архитектуре. | |
|
|
|
|
|
|
|
для: CrazyAngel
(21.03.2013 в 10:53)
| | Это не исходные данные, это даже не понять, что такое! | |
|
|
|
|
|
|
|
для: confirm
(21.03.2013 в 10:57)
| | Хм, а я все понял. Надо написать функцию, которая будет обрабатывать двумерный массив и соответсвующе производить замену в шаблоне($str); | |
|
|
|
|
|
|
|
для: CrazyAngel
(21.03.2013 в 11:07)
| | Ну и молодцом.
Вот только прочтите с самого начала пост весь, не спешась засучив рукава что-то предлагать, а вникнуть чего он хочет "махом получить". А затем уже в свете этого хотения посмотрите на "данные", которые по сути бардак полнейший в свете того чего он пытается сделать, и только потом давайте себе оценку.
Ему уже говорилось, если бы он только читал, что нельзя так, как он это представляет, и это надо ему ПОНЯТЬ, а уж шаблон, не шаблон, и как это решать, это уже второй вопрос. Вот так, и никак иначе. Все ему подсказки коню под хвост, если не понимать вещей простых. | |
|
|
|
|
|
|
|
для: artart
(21.03.2013 в 05:45)
| | Это шаблонизатор?)
http://php.net/manual/ru/function.str-replace.php
<?php
function lalola($data,$str){
foreach($data['name'] as $key => $name)
echo str_replace(array('{name}','{password}'),array($name,$data['password'][$key]),$str).'<br>';
}
|
| |
|
|
|
|
|
|
|
для: artart
(21.03.2013 в 05:45)
| | А так можно сделать более гибко)
<?php
function lalola($data,$str){
$replace = array();
$keys = array_keys($data);
$count_data = count($data[$keys[0]]);
$count_keys = count($keys);
for($i=0;$i<$count_data;$i++){
$replace = array();
for($j=0;$j<$count_keys;$j++){
$replace[] = $data[$keys[$j]][$i];
}
echo str_replace($keys,$replace,$str).'<br>';
}
}
|
| |
|
|
|
|
|
|
|
для: CrazyAngel
(21.03.2013 в 11:05)
| | я очень рад что вы меня поняли да это действительно шаблонизатор !!!
А самое главное ваш код очень читабелен и его поймет практически любой php - шник !!!
Большое вам спасибо !!! | |
|
|
|