Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите чайнику с масивами !!!
 
 автор: artart   (19.03.2013 в 03:23)   письмо автору
 
 

здравствуйте уважаемые форумчане !


<?
$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 элементам . Подскажите пожалуйста как это реализовать !

  Ответить  
 
 автор: Valick   (19.03.2013 в 07:24)   письмо автору
 
   для: artart   (19.03.2013 в 03:23)
 

что в вашем понимании перебор?
значения нужно соединить?

  Ответить  
 
 автор: psychomc   (19.03.2013 в 12:17)   письмо автору
 
   для: artart   (19.03.2013 в 03:23)
 

напишите что хотите получить на выходе

  Ответить  
 
 автор: confirm   (19.03.2013 в 12:32)   письмо автору
 
   для: artart   (19.03.2013 в 03:23)
 

TestArray - будет воспринято как константа, чего у вас нет, а значит это ошибка. Должно быть: $TestArray - объявленная переменная.
$result .= $value; - это ошибка, так как $result не объявлена ранее.

Все это заменяется одной php-функцией:
<?
$test 
= array('1','2','3','4'); 
echo 
implode($test);

  Ответить  
 
 автор: Igorek   (19.03.2013 в 13:15)   письмо автору
 
   для: confirm   (19.03.2013 в 12:32)
 

>$result .= $value; - это ошибка, так как $result не объявлена ранее.

это скорее предвестник ошибки. Хотя, спорить не буду, что инициализировать переменную надо

  Ответить  
 
 автор: psychomc   (19.03.2013 в 16:16)   письмо автору
 
   для: Igorek   (19.03.2013 в 13:15)
 

да, не критично, но лучше объявлять

  Ответить  
 
 автор: artart   (19.03.2013 в 21:43)   письмо автору
 
   для: confirm   (19.03.2013 в 12:32)
 

про эту функцию я отлично знаю я не много не так обьяснил мне нужно чтобы в теле цикла я мог выполнять любые операции над элементами массива разом то есть не по одному элементу а по всем. А на счет переменных советую делать поменьше глобальных во избежание путаницы !


если я не ошибаюсь то функция implode() клеит массив и возвращает строку но мне надо что то вроде этого
 <? 

foreach($test sa $value) {     $value+1;это первый элемент     $value+5это второй элемент      $value+5+(100*3);это третий элемент          }         
                                    
 
?> 
 

  Ответить  
 
 автор: Valick   (19.03.2013 в 21:58)   письмо автору
 
   для: artart   (19.03.2013 в 21:43)
 

у вас что-то не в порядке с логикой приложения, раз у вас возникают такие вопросы

  Ответить  
 
 автор: artart   (19.03.2013 в 22:08)   письмо автору
 
   для: Valick   (19.03.2013 в 21:58)
 

я не просил меня учить логике, просто если можете то подскажите - я же не советую вам на питон перейти!

  Ответить  
 
 автор: Valick   (19.03.2013 в 22:26)   письмо автору
 
   для: artart   (19.03.2013 в 22:08)
 

у меня последнее время часто возникает ситуация

у вас что-то не в порядке с логикой приложения

____
я не просил меня учить логике

а я не спрашивал у вас как мне отвечать на вопросы форума

  Ответить  
 
 автор: artart   (19.03.2013 в 22:50)   письмо автору
 
   для: Valick   (19.03.2013 в 22:26)
 

я не в коем случае не хотел вам грубить просто у меня такая ситуация столкнулся я с cms joomla

сами разработчики мне очень понравились все у них правильно и хорошо, но те кто пишет под

этот движок а точнее код их просто не четабельный в результате доработка каких приложений ,

написанных не самими разработчиками joomla, очень изнурительный процес поэтому я решил написать

собственную среду разработки у которой первая задача быть очень легко дорабатываемой ну я не буду вдаваться в подробности как только соберу все в кучу так обязательно выложу на все общее обозрение поэтому я прошу конкретно помочь если можете !

  Ответить  
 
 автор: CrazyAngel   (20.03.2013 в 09:31)   письмо автору
 
   для: 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, то делать новую строчку

  Ответить  
 
 автор: Valick   (20.03.2013 в 10:14)   письмо автору
 
   для: CrazyAngel   (20.03.2013 в 09:31)
 

вместо $i++, можно использовать $i=$i+7

  Ответить  
 
 автор: CrazyAngel   (20.03.2013 в 10:50)   письмо автору
 
   для: Valick   (20.03.2013 в 10:14)
 

Тогда придется проверять каждую переменную, так как в конце можно легко выйти за пределы массива

  Ответить  
 
 автор: Lotanaen   (20.03.2013 в 11:04)   письмо автору
 
   для: CrazyAngel   (20.03.2013 в 10:50)
 

так и в Вашем примере та же проблема.

  Ответить  
 
 автор: CrazyAngel   (20.03.2013 в 11:31)   письмо автору
 
   для: Lotanaen   (20.03.2013 в 11:04)
 

У меня как раз нет, так как я сначала ищу целое колличество блоков (по 7 в каждой), а потом их перебираю. В конце я показал как получить последние элементы, которых не хватило чтоб собрать 7.

  Ответить  
 
 автор: Valick   (20.03.2013 в 11:34)   письмо автору
 
   для: CrazyAngel   (20.03.2013 в 11:31)
 

ограничить $i<$count; до числа кратного 7 не проблема
да и при следующей итерации условие даже $i<$count; не пройдет, и останутся всего лишь нетронутые ключи массива остатка, никакого выхода за пределы не произойдет

  Ответить  
 
 автор: CrazyAngel   (20.03.2013 в 12:01)   письмо автору
 
   для: 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].' '; 

  Ответить  
 
 автор: psychomc   (21.03.2013 в 13:02)   письмо автору
 
   для: CrazyAngel   (20.03.2013 в 09:31)
 

>P.S. У джумулы плохая архитектура и написана она плохо.

и сколько вы просидели над исходниками джумлы, чтобы это понять?

  Ответить  
 
 автор: CrazyAngel   (21.03.2013 в 22:42)   письмо автору
 
   для: psychomc   (21.03.2013 в 13:02)
 

Делал и дорабатывал около 7-8 сайтов на этой системе.

  Ответить  
 
 автор: psychomc   (21.03.2013 в 23:17)   письмо автору
 
   для: CrazyAngel   (21.03.2013 в 22:42)
 

ясно. но что конкретно вам не понравилось? может быть кривые руки были у тех, кто на ней делал свои сайты? и, вполне вероятно, вам тоже нужно было не брать в руки напильник, а читать документацию и использовать какие-то встроенные возможности. я конечно не спец в joomla, но ее популярность меня заставляет думать, что всё там не так плохо.

  Ответить  
 
 автор: CrazyAngel   (21.03.2013 в 23:45)   письмо автору
 
   для: psychomc   (21.03.2013 в 23:17)
 

Ее популярность из-за того, что она старая, и в свое время сильно рекламировалась. А сделана она была, когда бесплатных более-менее CMS не было по сути.

  Ответить  
 
 автор: psychomc   (22.03.2013 в 02:31)   письмо автору
 
   для: CrazyAngel   (21.03.2013 в 23:45)
 

ну а с архитектурой то что не так? вроде ж уже и mvc появилось

  Ответить  
 
 автор: psychomc   (22.03.2013 в 02:32)   письмо автору
 
   для: CrazyAngel   (21.03.2013 в 23:45)
 

del

  Ответить  
 
 автор: confirm   (20.03.2013 в 05:03)   письмо автору
 
   для: artart   (19.03.2013 в 21:43)
 

И как вы себе это представляете - разом?
Представьте, что вам нужно окрасить забор. Сможете ли вы выкрасить кисточкой все его штакетники разом?

  Ответить  
 
 автор: Valick   (20.03.2013 в 10:12)   письмо автору
 
   для: confirm   (20.03.2013 в 05:03)
 

Ну выкрасить разом можно, взяв палку подлиннее и привязав к ней кисточки на определенном расстоянии, но для этого надо знать смещение относительно ведущей кисти.
Выглядеть это будет достаточно странно и качество покраски оставит желать лучшего.
Может даже быть маляр за такую "инициативу" распрощается с работодателем.
___
ТС не предоставил четкой информации по поводу смещения, и подозреваю определенных параметров нет. Функций для работы с массивами достаточно много. Но судя по той информации которую предоставил ТС, налицо ошибка в логике.

  Ответить  
 
 автор: confirm   (20.03.2013 в 11:14)   письмо автору
 
   для: Valick   (20.03.2013 в 10:12)
 

А речь разве о нескольких кисточках? Да и забор понятие "длинное", если ли смысл вязать кисточки? Суть не в кисточках, а в действиях.
Вместо кисточек напишите на бумаге три цифры и мысленно сложите их. После этого опишите процесс своего мышления - и как вы складывали?
На языке еще можно написать "желание все сразу", типа implode(',', array), и эта запись выглядит как "единым махом", но только выглядит, а вот обращаться придется к каждому элементу массива все равно. Даже если и получить все элементы как память ими занимаемую, то чтобы вставить между ними символ нужно еще переместиться по необходимому смещению. Но даже имея возможность переместившись скопом во все нужные места, нельзя будет выполнить эту операцию, так как первая же вставка будет сдвигать элементы, причем каждый третий на единицу больше.
И если даже выдумать шустрый интерпретатор могущий "сразу", то это так бы и осталось его "желанием", так как команды в процессоре не обрабатываются сразу, сперва нужно получить байт, узнать сколько байт команда занимает, выполнить ее, а по смещению от длины команды получить следующую, и так далее. Точно также получают элементы массива, а не все скопом. Так что ваша палка с кисточками, это просто пустая трата энергии.

  Ответить  
 
 автор: Valick   (20.03.2013 в 11:38)   письмо автору
 
   для: confirm   (20.03.2013 в 11:14)
 

у вас как с адекватным восприятием окружающего пространства?
вы привели пример, а привел вариант решения и написал в качестве резюме
Выглядеть это будет достаточно странно и качество покраски оставит желать лучшего.
Может даже быть маляр за такую "инициативу" распрощается с работодателем.

на что вы мне отвечаете
Так что ваша палка с кисточками, это просто пустая трата энергии.
___
я говорю "белое", вы мне отвечаете, "нет - это белое"...
на что я должен в свою очередь следуя логике возразить " вы не правы - это белое"

  Ответить  
 
 автор: confirm   (20.03.2013 в 11:47)   письмо автору
 
   для: Valick   (20.03.2013 в 11:38)
 

У меня все нормально с восприятием. А вот вы не понимаете, что даже штакетницы забора это отдельные элементы.

  Ответить  
 
 автор: Valick   (20.03.2013 в 11:49)   письмо автору
 
   для: confirm   (20.03.2013 в 11:47)
 

Вы неисправимы :)
Перестаньте считать, что окружающий мир на порядок глупее чем вы.
Забор может быть и бетонный, так что со штакетником вы как-то "в молоко" :)
но речь не об этом...

  Ответить  
 
 автор: confirm   (20.03.2013 в 11:57)   письмо автору
 
   для: Valick   (20.03.2013 в 11:49)
 

Во-первых я не считаю кого-то глупее, это только ваши домыслы.
Во-вторых, человеку (в данном случае автору темы) надо задумываться над тем, что он излагает, и покрасить забор одной кисточкой было предложено ему.

Не кипишитесь напрасно, это также не рационально как и вязать к палке кисти, потому как красить таким чудом будет очень неудобно. Но вы же можете красить как вам угодно. Это вас устроит?
.

  Ответить  
 
 автор: artart   (21.03.2013 в 05:45)   письмо автору
 
   для: 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 ну очень буду благодарен за помощь в решении этой задачи заранее спасибо

  Ответить  
 
 автор: confirm   (21.03.2013 в 06:46)   письмо автору
 
   для: artart   (21.03.2013 в 05:45)
 

3 тип данных, 4 тип данных - это не данные, это набор глупостей.
Вы ведь думали о чем-то когда писали это, а теперь опишите словами свои мысли - чего вы планировали и ожидаете от этих записей?

  Ответить  
 
 автор: CrazyAngel   (21.03.2013 в 10:53)   письмо автору
 
   для: confirm   (21.03.2013 в 06:46)
 

Это исходные данные, и считать их глупостью - глупость) надо работать с тем, что есть, а вопрос был не об архитектуре.

  Ответить  
 
 автор: confirm   (21.03.2013 в 10:57)   письмо автору
 
   для: CrazyAngel   (21.03.2013 в 10:53)
 

Это не исходные данные, это даже не понять, что такое!

  Ответить  
 
 автор: CrazyAngel   (21.03.2013 в 11:07)   письмо автору
 
   для: confirm   (21.03.2013 в 10:57)
 

Хм, а я все понял. Надо написать функцию, которая будет обрабатывать двумерный массив и соответсвующе производить замену в шаблоне($str);

  Ответить  
 
 автор: confirm   (21.03.2013 в 11:34)   письмо автору
 
   для: CrazyAngel   (21.03.2013 в 11:07)
 

Ну и молодцом.
Вот только прочтите с самого начала пост весь, не спешась засучив рукава что-то предлагать, а вникнуть чего он хочет "махом получить". А затем уже в свете этого хотения посмотрите на "данные", которые по сути бардак полнейший в свете того чего он пытается сделать, и только потом давайте себе оценку.
Ему уже говорилось, если бы он только читал, что нельзя так, как он это представляет, и это надо ему ПОНЯТЬ, а уж шаблон, не шаблон, и как это решать, это уже второй вопрос. Вот так, и никак иначе. Все ему подсказки коню под хвост, если не понимать вещей простых.

  Ответить  
 
 автор: CrazyAngel   (21.03.2013 в 10:46)   письмо автору
 
   для: 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>';

}

  Ответить  
 
 автор: CrazyAngel   (21.03.2013 в 11:05)   письмо автору
 
   для: 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>';
    }

  Ответить  
 
 автор: artart   (22.03.2013 в 02:36)   письмо автору
 
   для: CrazyAngel   (21.03.2013 в 11:05)
 

я очень рад что вы меня поняли да это действительно шаблонизатор !!!

А самое главное ваш код очень читабелен и его поймет практически любой php - шник !!!

Большое вам спасибо !!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования