-
Posts
11 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Store
Everything posted by 4ak
-
Я пока плохо представляю какой и для каких целей цикл или функцию использовать. Имеются мысли в сторону авторизации и тд., но не более. На текущем этапе хочу хорошо разобраться в теории, чтобы была база и было проще в дальнейшем.
-
Я пока что не ищу легких путей, а просто изучаю php. Но по вашему циклу я вижу, что не безболезненно Ваш цикл будет работать неправильно, потому что вы уменьшаете переменную $i, а результат увеличиваете в $n раз . Соответственно результат будет постоянно увеличиваться в $n раз и так будет происходить $i раз. То есть при $n=4 цикл выполнится 4 раза и $result будет равен 4*4*4*4= 256, в то время как факториал(4) равняется 24. Если написать так for($n;$n>0;$n--) то все будет ок.
-
Спасибо, разобрался, но насколько я понимаю элементов здесь все же 9, потому что массивы это тоже элемент и функция count как раз поэтому и считает 9. Так более наглядно $user = array ( 1=>1 2=>2 3=>3 4=>array ( 1=>10 2=>12 3=>array( 1=>a 2=>1)
-
В этом массиве $a = array(1,2,3,array(10)) как раз 5 элементов, можно проверить стандартной функцией count(a,1)(1 - используется для многомерных массивов, по умолчанию стоит 0.) Это как раз аргумент mode который я забыл вписать в функцию, хотя там было условие с mode в if, но php выдавал и ты удалил условие.Вот работающий код:. function myCount($item, $mode=0) { if(is_null($item))/**/ return 0; if(!is_array($item)) return 1; $cnt=0; foreach($item as $v){ if($mode==1 and is_array($v)) $cnt += myCount($v, 1); $cnt++; } return $cnt; } $a=array(1,2,3,array(10)); echo myCount($a,1); echo count($a,1); При подсчете этого массива $a=array(1,2,3,array(10,12,array('a',1))); твоя функция выдает 7, а оригинальный count($a,1)и myCount($a,1) выдают 9. В твоей функции я передвинул $ret вниз и все стало правильно считаться, хотя вот эта строка if (!is_array($item)); становится бессмысленной. if (!is_array($item)); else $ret+=myCount($item); $ret++; Теперь вопросы Вот эта часть кода, как я понял перекладывает по одной ячейке из заданнго массива в новый и при каждом переложении увеличивает переменную cnt на 1, что и позволяет посчитать кол-во элементов в массиве. Правильно? foreach($item as $v){ $cnt++; А вот этот проверяет, есть ли в переложенных элементах еще массив, и если есть присавивает $cnt = myCount($v, 1)+ $cnt, далее функция вызывает сама себя и вот тут я уже не понимаю, что она делает. foreach($item as $v){ if($mode==1 and is_array($v)) $cnt += myCount($v, 1); $cnt++; Вообще в идеале не мог бы ты написать как ведет себя эта функция на примере конкретного многомерного массива, как ты это сделал с факториалом: fc(3) = 3*fc(2) = 3*2*fc(1) = 3*2*1*fc(0) = 3*2*1*1; Так намного понятней. Заранее спасибо.
-
K313, Int Спасибо, с первой все понятно. Вторая - аналог существующей функции count, ее я начиная с цикла foreach не понимаю.
-
function factorial($n){ if ($n == 0) return 1; return $n * factorial($n-1); /*считаем factorial(3), php возвращает 3 * factorial(2) далее идет на верх к функции factorial($n) и считает уже factorial(2),теперь уже возвращает 3 * 2 * factorial(1) и тд. Но непонятно, что будет при factorial(0). Он же поидее просто вернет 1 при $n=0 и что тогда произойдет со всеми остальными вычислениями?*/ } $result = factorial(5); echo "5! = " . $result; function myCount($item) { if(is_null($item)) return 0; if(!is_array($item)) return 1; $cnt=0; foreach($item as $v){ if($mode==1 and is_array($v)) $cnt += myCount($v, 1); $cnt++; /* здесь все понятно пока функция считает значения простого массива, но когда появилась рекурсия для того, чтобы функция считала значения и многоуровнего массива(эти 3 строки) я перестал понимать что делает php. Можете написать, что он делает начиная с цикла foreaach?*/ } return $cnt; } Возникло непонимание с рекурсивной функцией. Первый код - функция факториала, второй код воссоздание функции count. Свои мысли и вопросы написал в комментариях к коду. Могу заблуждаться в порядке действий php, так что если что поправляйте. Заранее спасибо!
-
Спасибо мужики, как раз с утра по соурс коду понял, что подцикл выполняется 10 раз на каждый повтор основного цикла. //Почему то 3 раза отправилось, такой еще вопрос, пока что просто изучаю, но говорят фреймворки облегчают жизнь, дк вот чем они облегчат написание кода на php?
-
<table border="1"> <?php $cols = 10; $rows = 10; for($tr=1; $tr<=$rows; $tr++){ echo "<tr>"; for($td=1; $td<=$cols; $td++){ echo "<td>", $tr * $td, "</td>"; } echo "</tr>"; } ?> </table> Пацаны выручайте. Изучаю PHP, наткнулся на таблицу умножения и запутался в хлам. Все работает, но как не пойму. То ли они вместе выполняются, то ли по очереди - непонятно. Но факт в том. что в исходном коде получается только 10 тегов <tr>, а все остальные <td>. Значит подцикл который выводит <td> выполняется во много раз больше. Почему? Так же непонятно, как вот это echo "<td>", $tr * $td, "</td>"; считает все в порядке таблицы умножения. По логике должно быть вот так - 1*1, 2*2, 3*3,4*4, ведь коэффициенты растут пропорционально. Откуда умножение 5 на 1, 6 на 3 и тд.
-
Фотография с хрома. Расширений вроде нет. Может как то связано с тем, что у меня мак, на винде не пробовал.
-
Странно. У меня вот так вот в Хроме и Сафари.
-
Пацаны помогайте. Проблема с версткой кнопки в окне авторизации. Задал высоту кнопки "Войти" 130px, показывает эти 130px только фаерфокс, остальные бразуеры(исключая ИЕ, его не пробовал) ставят высоту по дефолту. С шириной таких проблем нет. Это просто практика поэтому больше интересна причина возникновения проблемы.