Поправим задание которое сделал Дан массив: PHP: $arr = [ ['name'=>'Коля', 'age'=>30, 'salary'=>500], ['name'=>'Вася', 'age'=>31, 'salary'=>600], ['name'=>'Петя', 'age'=>32, 'salary'=>700], ]; Сделать HTML: <table> <tr> <tr> <td>Коля</td> <td>30</td> <td>500</td> </tr> <tr> <td>Вася</td> <td>31</td> <td>600</td> </tr> <tr> <td>Петя</td> <td>32</td> <td>700</td> </tr> </tr> </table> У меня получилось так, нормально? Или как то по другому делают? PHP: $arr = [ ['name'=>'Коля', 'age'=>30, 'salary'=>500], ['name'=>'Вася', 'age'=>31, 'salary'=>600], ['name'=>'Петя', 'age'=>32, 'salary'=>700], ]; echo '<table>'; foreach ($arr as $key => $value) { echo "<tr> <tr> <td>{$arr[$key]['name']}</td> <td>{$arr[$key]['age']}</td> <td>{$arr[$key]['salary']}</td> </tr>"; } echo '</table>';
@4akHopic, ну тут обсуждать особо нечего, задание - сколько будет 2+2. Единственное, когда выводишь большой кусок HTML, лучше отключать режим php, а потом внутри HTML использовать конструкцию <?= ?>, подготовит тебя к использованию реальных фреймворков без шаблонизатора. --- Добавлено --- О, и кстати, да, @Valick прав, там уже есть value, зачем ещё раз вычислять? Перечитай foreach
еще один не дописал в конце </tr> PHP: <?php $arr = [ ['name'=>'Коля', 'age'=>30, 'salary'=>500], ['name'=>'Вася', 'age'=>31, 'salary'=>600], ['name'=>'Петя', 'age'=>32, 'salary'=>700], ];?> <table> <tr> <?php foreach ($arr as $key=>$value) { ?> <tr> <td><?= $value['name'] ?></td> <td><?= $value['age'] ?></td> <td><?= $value['salary'] ?></td> </tr> <?php } ?> </tr> </table>
@4akHopic, то что не дописал это правильно, а вот когда дописал стало неправильно. Посмотрел исходный хтмл, я конечно не верстальщик, но два <tr> подряд сомнительная выгода.
по заданию так: HTML: <table> <tr> <tr> <td>Коля</td> <td>30</td> <td>500</td> </tr> <tr> <td>Вася</td> <td>31</td> <td>600</td> </tr> <tr> <td>Петя</td> <td>32</td> <td>700</td> </tr> </tr> </table>
Число века можно вычислить, умножив 5 на разность между двумя первыми цифрами года и наибольшего числа, кратного 4 (это число не должно быть больше двух первых цифр года). Например, для 3400: 5 х (34-32) = 10 (от 10 отнимаем 7 и получаем 3). Чет не могу разобраться: это число не должно быть больше двух первых цифр года .... Суммы двух первых чисел? или как понимать? или для 34 это 32, для 33-32 для 27 - 24 и т.д. от 10 отнимаем 7 и получаем 3 - и откуда мы берем 7, это сумма двух первых чисел? наработки есть, но я не разобрался с условием, код не работает как надою
Для 3500 века, результат 7 а должен быть 1 так будет если от суммы двух первых чисел 8 снова отнять 7 ручками будет так 35 - 32 = 3 3*5=15 15-8=7 7<8 оставляем а должно быть 1 PHP: <?php function rizn($k,$num){ $d = $k; while ($d % $num) { $d--; } return $k-$d; } $year = '3500'; $strvek = substr($year,0,2); $sumvek = str_split($strvek, 1); $sumvek = array_sum($sumvek); $arg3 = 4; $strvek = rizn($strvek,$arg3); $strvek *=5; if($sumvek>$strvek){ echo "rezult Strvek = $strvek"; }else{ $strvek -= $sumvek; echo "Else $strvek"; }
Работа с файлами и папками. Функция удаления файлов и папок(подпапок) Пусть в корне вашего сайта лежит папка dir с текстовыми файлами и подпапками. Удалите папку 'test' вместе с ее содержимым. PHP: removeDir('test'); function removeDir($dir) { $files = array_diff(scandir($dir), ['..', '.']); foreach ($files as $file) { $patch = $dir . '/' .$file; if(is_file($patch)){ unlink($patch); }elseif(is_dir($patch)!== false) { removeDir($patch); }else { rmdir($patch); } } return rmdir($dir); }
@4akHopic, что то не так с логикой, по-моему. Расскажи, при каком условии должна выполнится строка 12? --- Добавлено --- Хотя, вроде она у тебя просто лишняя, а функция всё равно рабочая. Логика есть. ОК, вроде рекурсию соображаешь. Это хорошо. Многие спотыкаются.
Комментирую твой код: Код (Text): if(is_file($patch)){ // Если файл unlink($patch); // удалить файл }elseif(is_dir($patch)!== false) { // иначе если папка removeDir($patch); // рекурсивно удалить папку }else { // иначе (эм, а что это собственно, если и не файл и не папка rmdir($patch); // удаляем неизвестно что, как будто это папка } Т.е. поскольку в папке могут быть или файлы или другие папки последний else никогда не выполнится
спасибо, верно говоришь. Вчера почему то код что ниже не хотел выполнятся корректно, не удалял саму папку 'test', после я написал еще один else if PHP: elseif(is_dir($patch)!== false) { removeDir($patch); }else { rmdir($patch); } Но сегодня этот вариант работает корректно в чем секрет мне не известно . PHP: echo removeDir('test'); function removeDir($dir) { if (file_exists($dir)) { $files = array_diff(scandir($dir), ['..', '.']); foreach ($files as $file) { $patch = $dir . '/' .$file; if(is_file($patch)){ unlink($patch); } else { removeDir($patch); } } return rmdir($dir); }else { return 'Папки '. $dir . ' не существует'; } }
Так делать не надо. Либо человеческий код ошибки верни, либо кинь исключение. Как ты будешь такой возврат отлавливать при вызове?
Работа с геттерами и сеттерами. Есть class Emploee для даты. Функция private corectAge() может например где то сохранить значение(private $newage если оно прошло проверку, чтобы после введения некорректных данных(private $age вернуть нам это значение(private $newage. Мы ввели корректный возраст 18, после 101, вернуть 18 назад можно? PHP: class Emploee { private $age; public function setAge($age) { if (corectAge($age)) { $this->age = $age; } } public function showAge() { return $this->age; } private function corectAge($age) { return $age>=1 && $age <= 100; } }
Ну в другом поле. Только мне логика твоя не понятна. В классе сейчас логика, что записывать в поле только правильное значение. А ты что хочешь, и неправильное куда-то писать?
Это переработанный добавлено в function corectAge else но это не работает я пробовал несколько вариантов всех не припомню. Суть в том если раньше вводилось корректное значение то запомнить его пока не буде введено новое корректное значение. сейчас если я ввожу не корректное то оно попросту перезапишет предыдущее в false. PHP: <?php class Emploee { private $age; private $newage public function setAge($age) { if (corectAge($age)) { $this->age = $age; } } public function showAge() { return $this->age; } private function corectAge($age) { if($age>=1 && $age <= 100){ return $age; }else{ return $newage } } } $user = new Employee; $user->setAge(45); $user->showAge(); ?> Или добавить if() else() в setAge() PHP: public function setAge($age) { $newage = $this->age;//берем предыдущее значение и присваиваем его $newage if (corectAge($age)) { $this->age = $age; }else{ $this->age = $newage// здесь делаем наоборот если новое значение не прошло проверку } } но ни один вариант с тех что я пробовал не работает
@4akHopic, ты в курсе, как работает php? Экземпляр класса существует только в течение одного запроса http://phpfaq.ru/na_tanke
Я спросить хотел есть какой то метод, или нет, буду знать что нет, значит я условие понял не верно. Задача: Дополните класс Employee приватным методом isAgeCorrect, который будет проверять возраст на корректность (от 1 до 100 лет). Этот метод должен использоваться в сеттере setAge перед установкой нового возраста (если возраст не корректный - он не должен меняться).
Ну так ты сделал задачу. Если возраст не корректный, он у тебя не меняется. Что тебя не удовлетворяет? Вот этот вариант отвечает задаче:
Значит я не верно понял суть задачи, думал так: я ввел 40 это корректно, после 101 это не корректно, значит echo $user->showAge(); должно вывести 40. Думаю если сделать через __construct('VAsja',45) а после $user->setAge(101); должно показать echo $user->showAge(); ответ 45 сейчас попробую все работает. если сделать public $age то тоже выводит нужный мне результат, извиняюсь за истинно тупой вопрос)))
@4akHopic, не пытайся сделать больше, чем написано в задаче. Там же ни слова про ввод. А если бы было про ввод, кстати, то прочти ссылку. Это уже чуть более сложные механизмы задействовать нужно