Jump to content

4ak

Newbie
  • Posts

    11
  • Joined

  • Last visited

4ak's Achievements

Explorer

Explorer (1/14)

0

Reputation

  1. Я пока плохо представляю какой и для каких целей цикл или функцию использовать. Имеются мысли в сторону авторизации и тд., но не более. На текущем этапе хочу хорошо разобраться в теории, чтобы была база и было проще в дальнейшем.
  2. Я пока что не ищу легких путей, а просто изучаю php. Но по вашему циклу я вижу, что не безболезненно Ваш цикл будет работать неправильно, потому что вы уменьшаете переменную $i, а результат увеличиваете в $n раз . Соответственно результат будет постоянно увеличиваться в $n раз и так будет происходить $i раз. То есть при $n=4 цикл выполнится 4 раза и $result будет равен 4*4*4*4= 256, в то время как факториал(4) равняется 24. Если написать так for($n;$n>0;$n--) то все будет ок.
  3. Спасибо, разобрался, но насколько я понимаю элементов здесь все же 9, потому что массивы это тоже элемент и функция count как раз поэтому и считает 9. Так более наглядно $user = array ( 1=>1 2=>2 3=>3 4=>array ( 1=>10 2=>12 3=>array( 1=>a 2=>1)
  4. В этом массиве $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; Так намного понятней. Заранее спасибо.
  5. K313, Int Спасибо, с первой все понятно. Вторая - аналог существующей функции count, ее я начиная с цикла foreach не понимаю.
  6. 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, так что если что поправляйте. Заранее спасибо!
  7. Спасибо мужики, как раз с утра по соурс коду понял, что подцикл выполняется 10 раз на каждый повтор основного цикла. //Почему то 3 раза отправилось, такой еще вопрос, пока что просто изучаю, но говорят фреймворки облегчают жизнь, дк вот чем они облегчат написание кода на php?
  8. <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 и тд.
  9. 4ak

    Авторизация

    Фотография с хрома. Расширений вроде нет. Может как то связано с тем, что у меня мак, на винде не пробовал.
  10. 4ak

    Авторизация

    Странно. У меня вот так вот в Хроме и Сафари.
  11. Пацаны помогайте. Проблема с версткой кнопки в окне авторизации. Задал высоту кнопки "Войти" 130px, показывает эти 130px только фаерфокс, остальные бразуеры(исключая ИЕ, его не пробовал) ставят высоту по дефолту. С шириной таких проблем нет. Это просто практика поэтому больше интересна причина возникновения проблемы.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy