|
|
|
| Есть цикл для 4 элементов .
$NN состоит из 4 элеменов под него и написан цикл, как написать цикл для любого количества элемиентов в переменной - от 1 до 100.
$NN=($_POST['NN']);
echo"$NN \n".'<br>';
for ($i=0;$i<=strlen($NN)-1;$i++){
$N=substr($NN, $i, 1);
print ($N.'<br>') ;
$array_N[$i]=intval($N);
for ($i1=2;$i1<=$eng[$array_N[0]-2][1]+1;$i1++){
for ($i2=2;$i2<=$eng[$array_N[1]-2][1]+1;$i2++){
for ($i3=2;$i3<=$eng[$array_N[2]-2][1]+1;$i3++){
for ($i4=2;$i4<=$eng[$array_N[3]-2][1]+1;$i4++){
print ($eng[$array_N[0]-2][$i1].$eng[$array_N[1]-2][$i2].$eng[$array_N[2]-2][$i3].$eng[$array_N[3]-2][$i4].'<br>') ;
}
}
}
}
|
Как сделать для любого количества элементов?
нужно только изменить циклы не могу врубиться как? | |
|
|
|
|
|
|
|
для: Port_Artur1
(30.05.2008 в 11:06)
| | ну этот цикл для 4 элеменов а как например сделать для пяти , только чтобы не дописывать ещё 1 цикл и было универсальным, и годилось для разного количества элеменотов
Помогите пожалуйста. | |
|
|
|
|
|
|
|
для: Port_Artur1
(30.05.2008 в 15:08)
| | HELP
как же написать этот цикл циклов?
Ну очень надо! | |
|
|
|
|
|
|
|
для: Port_Artur1
(30.05.2008 в 20:03)
| | Вы знаете, а я так и не понял, что значит универсальный, это как? Чтобы можно было обойти, например, многомерный массив ооооогромадной вложенности? | |
|
|
|
|
|
|
|
для: sim5
(30.05.2008 в 20:07)
| | ну да массив большой вложенности но чтобы не менять количество вложенных циклов в зависимости от длины элемента, чтобы работало в зависимости от размерности элемента(длины).
Длина элемента = число вложенности циклов. | |
|
|
|
|
|
|
|
для: Port_Artur1
(30.05.2008 в 22:05)
| | В JS у массива будет, дупустим, elements.length, а в РНР число элементов массива - count. И вам нужно будет столько пройти вложенных циклов, сколько потребется для всего обхода массива. Например:
<?
foreach($array as $key => $val) {
if (is_array($val)) {
//обходим этот массив
} esle {
//обрабатываем значение
}
}
|
Как вы можете чем-то ограничить в этом случае, если вам неизвестно, что там может быть, как вы говорите выше? | |
|
|
|
|
|
|
|
для: sim5
(30.05.2008 в 22:20)
| | Лучше вместо foreach использовать array_map():
<?php
function _recursive($v)
{
if( is_array($v) )
{
$v = array_map('_recursive', $v);
}
else
{
# Обработка значения
}
return $v;
}
?>
|
| |
|
|
|
|
|
|
|
для: BinLaden
(31.05.2008 в 02:02)
| | Я не говорил о том, что использовать, а интересно было узнать, что значит универсальное не известно под что. | |
|
|
|
|
|
|
|
для: sim5
(31.05.2008 в 11:07)
| | Извиняюсь, если задел Вас. Я лишь сказал для тех, кто не в курсе.
Вы же, безусловно, не нуждаетесь в подобных советах. | |
|
|
|
|
|
|
|
для: BinLaden
(31.05.2008 в 13:37)
| | Совет никогда не бывает лишним.) Мне просто охота понять, в чем проблема автора? Может быть он просто не понимает, что сколько элементов массиве не важно, если знать этого не нужно? | |
|
|
|
|
|
|
|
для: Port_Artur1
(30.05.2008 в 11:06)
| | Проще будет применить рекурсию. | |
|
|
|
|
|
|
|
для: Trianon
(30.05.2008 в 23:00)
| | Приношу свои извинения за неправильно поставленный вопрос
Есть массив:
$pon = array(
array(1,4,"1","2","3","4"),
array(2,4,"4","2","3","7"),
array(3,2,"1","2"),
array(4,4,"8","2","3","4"),
array(5,3,"1","5","3"),
array(6,4,"9","2","3","7"),
array(7,4,"3","6","7","8"),
array(8,4,"3","4","6","8"),
array(9,3,"1","2","3"),
array(0,4,"1","2","3","4"),
);
1элемент каждого вложенного массива - цифра.
2элемент - количество элементов массива соответсвующих каждой цифре.
При вводе числа необходимо перебрать все возможные варианты комбинаций и вывести их на экран:
Например вводят число 378
на экране :
133
134
136
138
163
164
166
168
....
и т.д. ну у меня что то вообще в голову не лезет идея написания.
Моджет кто опишет подробней как это надо написать.
Пожалуйста
Вложенные массивы для меня не проблема, а тут облом. | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 12:24)
| | А какая связь между 378 и
133
134
136
138
......
и все возможные варианты комбинаций чего? | |
|
|
|
|
|
|
|
для: sim5
(31.05.2008 в 12:40)
| | Да что Вы так акцентируете внимание на связь между этими числами - это необходимо для определённой задачи я немогу её здесь описывать на 10 листов просто нужно как то решить данный участок проблемы связанной с вложенными циклами
Есть массив массивов - нужно произвести перебор и всё
Помогите! если знаете как! | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 12:48)
| | Ну а зачем тогда так описывать массив, особенно указывать вторым элементов сколько число эелементов в массиве? Да и если просто обойти - обходите, но вы же сами пишите некое условие по перебору каких-то всевозможных комбинаций и чтобы было так-то и так-то, что же тогда думать о вашей задаче? Почему ваш массив не может быть таким:
$pon = array(
array(1,2,3,4),
array(1,2,3,4),
array(4,2,3,7),
array(1,2),
array(8,2,3,4),
array(1,5,3),
array(9,2,3,7),
array(3,6,7,8),
array(3,4,6,8),
array(1,2,3)
);
|
В нем все от индекса 0 по индекс 9, а узнать число элементов вложенных массивов (если нужно это) всегда не сложно. Вы ведь сами задаете вопросы запутанные, и сами же возмущаетесь. | |
|
|
|
|
|
|
|
для: sim5
(31.05.2008 в 13:24)
| | Массив может выглядеть и так как вы написали - согласен так даже проще и удобнее. | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 12:24)
| |
<?php
function recurs($arr)
{
foreach ($arr as $kk)
{
if (is_array($kk)) recurs($kk);
else echo $kk.'<br>';
}
}
recurs($pon);
?>
|
| |
|
|
|
|
|
|
|
для: SiM(R)
(31.05.2008 в 12:58)
| | Но ведь в каждом подмассиве разное количество элементов, как это учесть? | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 13:35)
| | > Но ведь в каждом подмассиве разное количество элементов, как это учесть?
Хоть SiM(R) и не последовал моему совету, но всё же я не вижу никакой зависимости от количества элементов в его коде. | |
|
|
|
|
|
|
|
для: BinLaden
(31.05.2008 в 13:38)
| | BinLaden помогите решить проблему - видно что ВЫ знаете как это сделать. | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 13:46)
| | > видно что ВЫ знаете как это сделать
К сожалению, я понимаю что Вы хотите сделать еще меньше других участников.
Вот Ваши слова:
> При вводе числа необходимо перебрать все возможные варианты комбинаций и вывести их на экран:
>
> Например вводят число 378
> на экране :
>
> 133
> 134
> 136
> 138
> 163
> ...
К чему Вы это сказали? Как это связано с перебором массива? И почему должны выводиться именно такие числа? | |
|
|
|
|
|
|
|
для: BinLaden
(31.05.2008 в 13:53)
| | $pon = array(
array(1,2,3,4),
array(1,2,3,4),
array(4,2,3,7),
array(1,2),
array(8,2,3,4),
array(1,5,3),
array(9,2,3,7),
array(3,6,7,8),
array(3,4,6,8),
array(1,2,3)
);
Птому что они соответсвуют элементам подмассивов
сначала берётся 1 элемент массива соответсвующего цифре 3 к нему прибавляется с помощью точки ($s.$e) 1 элемент подмассива соответсвующего цифре 7 и прибаляется 1 элемен соответсвующий цифре 8
затем беруться 1-е элементы первых двух цифр и второй элемент сосответсвующий цифре 8
когда закончатся элементф подмаасива 8
берётся 1 элемент аодмассива тройки
2 элемент подмассива семёрки
и опять перебираем все элементы 8
пока не переберём все варианты.
Я наверное ужасно описываю что должно получиться но увы логичнее не могу, не знаю как ещё подробнее описать | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 14:12)
| | Еще запутаннее получилось. Любой из элементов массива $pon - это будет массив, а если говорить о 1 элемент массива соответсвующего цифре 3, то что вы имеете ввиду - 3, это индекс массива $pon, или все таки этому числу должно соответствовать значание первого элемента вложенного массива, или вложенный массив с числом элементов равным 3? В общем запутано и не понятно. | |
|
|
|
|
|
|
|
для: sim5
(31.05.2008 в 14:28)
| | $pon = array(
array(a,s,y,w),
array(g,f,d,e),
array(d,g,h,f),
array(s,d),
array(n,f,g,h),
array(b,n,v),
array(c,b,c,m),
array(v,n,v,b),
array(c,b,n,v),
array(c,v,n)
);
вводим число 123 - получаем список
gds
gdd
ggs
ggd
.....
efs
efd- последнее значение полученное методом перебора,
так понятнее?
извините за моё неуменее правильно объяснять!
Подмассивы массива $pon соответсвуют в своём порядке цифрам от 0 до 9
o
1
2
3
4
5
6
7
8
9 | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 14:53)
| | Если често, то ничего не понятно. 123 можно связать так - $pon[1][0].$pon[2][0].$pon[3][0], что будет соответствовать gds, но с какого переляку отнести gdd к 123? Какой логикой это связано? | |
|
|
|
|
|
|
|
для: sim5
(31.05.2008 в 15:09)
| | $pon[1][0].$pon[2][0].$pon[3][0]
Вот с этого:
$pon[1][0].$pon[2][0].$pon[3][1]
$pon[1][0].$pon[2][1].$pon[3][0]
$pon[1][0].$pon[2][1].$pon[3][1]
$pon[1][0].$pon[2][2].$pon[3][0]
$pon[1][0].$pon[2][2].$pon[3][1]
$pon[1][0].$pon[2][3].$pon[3][0]
$pon[1][0].$pon[2][3].$pon[3][1]
$pon[1][1].$pon[2][0].$pon[3][0]
$pon[1][1].$pon[2][0].$pon[3][1]
$pon[1][1].$pon[2][1].$pon[3][0]
$pon[1][1].$pon[2][1].$pon[3][1]
$pon[1][1].$pon[2][2].$pon[3][0]
$pon[1][1].$pon[2][2].$pon[3][1]
$pon[1][1].$pon[2][3].$pon[3][0]
.......
$pon[1][3].$pon[2][3].$pon[3][1] - последний | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 15:17)
| | И вы думаете, что по предыдущим вашим постам об этом можно было догадаться? У вас даже в этом трудно проследить закономерность. | |
|
|
|
|
|
|
|
для: sim5
(31.05.2008 в 15:24)
| | Виноват - !
Видимо у меня такой же кавардак по данному вопросу, что и впредыдущих постах.
Если теперь понятно помогите пожалуйста! | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 15:31)
| | Нет не понятно.
Если кто-то понял закономерность связи 123 с тем, что вы написали в Port_Artur1 (31.05.2008 в 15:17), то пусть он в меня бросит камень. А как будет выглядеть ваша закономерность в Port_Artur1 (31.05.2008 в 15:17), если будет не 123, а 635 ? Пока не будет ясна логика этой связи, думаю, вам никто не поможет. | |
|
|
|
|
|
|
|
для: sim5
(31.05.2008 в 15:42)
| | не буду я в никого ничего бросать
непонятно объяснил -да да причётут взаимосвязи есть вопрос который нужно решить вот и всё.
не думаю, что я так тупо описываю! | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 15:48)
| | cheops взываю к вашей помощи - ВЫ всегда выручали! | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 15:49)
| | HELP, мозги уже не варят | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 18:25)
| | Пока только понял что это дрлжен быть вызов функции из неё самой | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 20:06)
| | :-D
автор: Trianon (30.05.2008 в 23:00) письмо автору
Проще будет применить рекурсию. | |
|
|
|
|
|
|
|
для: Киналь
(31.05.2008 в 20:09)
| | лучше рабочий вариант, а то не могу найти нужное звено для соединения всего | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 20:14)
| | Попробуйте так:
<?php
$pon = array(
array(1, 2, 3, 4),
array(1, 2, 3, 4),
array(4, 2, 3, 7),
array(1, 2),
array(8, 2, 3, 4),
array(1, 5, 3),
array(9, 2, 3, 7),
array(3, 6, 7, 8),
array(3, 4, 6, 8),
array(1, 2, 3)
);
function reduce_arr(&$pon, $keys)
{
$a = array();
$keys = (string) $keys;
if( !ctype_digit($keys) )
{
return false;
}
for($i = 0; $i < strlen($keys); $i++)
{
$a[] = $pon[$keys[$i]];
}
return $a;
}
function permutation()
{
global $a;
static $nest_lvl, $prefix;
$nest_lvl++;
if( $nest_lvl == count($a) )
{
foreach( $a[$nest_lvl - 1] as $val )
{
echo $prefix . $val . "\r\n";
}
}
else
{
foreach( $a[$nest_lvl - 1] as $k => $val )
{
$prefix .= $val;
permutation();
$prefix = substr($prefix, 0, -1);
}
}
$nest_lvl--;
}
$a = reduce_arr($pon, '378');
permutation();
?>
|
Коряво, правда. Не нравится зависимость от имён. | |
|
|
|
|
|
|
|
для: Киналь
(31.05.2008 в 20:09)
| | > Проще будет применить рекурсию.
Киналь, примените, нам хочется посмотреть :) | |
|
|
|
|
|
|
|
для: BinLaden
(31.05.2008 в 20:18)
| | пожалуйста :) | |
|
|
|
|
|
|
|
для: Port_Artur1
(31.05.2008 в 12:24)
| |
<?php
function generate($prefix, $plane)
{
if(empty($plane))
{
echo "$prefix<br/>\r\n";
return;
}
$slice = $plane[0];
foreach($slice as $digit)
generate($prefix.$digit, $plane[1]);
}
$pon = array(
'1'=> array("1","2","3","4"),
'2'=> array("4","2","3","7"),
'3'=> array("1","2"),
'4'=> array("8","2","3","4"),
'5'=> array("1","5","3"),
'6'=> array("9","2","3","7"),
'7'=> array("3","6","7","8"),
'8'=> array("3","4","6","8"),
'9'=> array("1","2","3"),
'0'=> array("1","2","3","4")
);
$num = "378";
$plane = array();
$i = strlen($num);
while( --$i >= 0 )
$plane = array($pon[$num[$i]], $plane);
generate("", $plane);
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(31.05.2008 в 20:24)
| | Это Вы г-на Киналя спасли? | |
|
|
|
|
|
|
|
для: BinLaden
(31.05.2008 в 20:27)
| | Да нет... просто на вопрос ответил...
Что-то не нравится? :) | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2008 в 20:28)
| | Да нет, всё замечательно. :) | |
|
|
|
|
|
|
|
для: BinLaden
(31.05.2008 в 20:29)
| | Собственно, я только что заметил - в Вашем варианте ведь тоже явная рекурсия применена.
Откуда тогда такая ирония в ответе Киналю? :) | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2008 в 20:37)
| | Огромное ВАМ всем спасибо. ОЧЕНЬ выручили теперь дальше пойдет всё как по маслу. Классно! | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2008 в 20:37)
| | Издрежки прошлой жизни... | |
|
|
|
|