$handle = file("E:\OpenServer\OSPanel\domains\php6\source.txt"); //фай содержит 3 значения, к примеру 3, 6, 120
$handleInt = array_map("integer", $handle); //приведение к int
$arrResult = range(1, $handleInt[2]);
function integer ($a){
return (integer)$a;
} //костыль для приведения элементов $handle к int
function fizzBuzz ($a, $b){
if (!($a % $b[0]) && !($a % $b[1])){//fatal error здесь
return "FB ";
} elseif (!($a % $b[0])) {
return "F ";
} elseif(!($a % $b[1])){
return "B";
} else return $a;
}
print_r($arrResult);
array_map("fizzBuzz", $arrResult, $handleInt);
?> </code>
Есть три числа которые программы принимает из файла. Первое число называется fizz, второе называется buzz. До третьего необходимо досчитать от единицы. Считая, надо выводить число. Если число кратно fizz - надо выводить F вместо числа. Если число кратно buzz - надо выводить B вместо числа. Если число кратно и fizz и buzz, надо выводить FB. И так - пока не будет достигнуто третье введенное число.
Пример условия и результата: Введены числа 2, 5, 18 Вывод должен быть таким: 1 F 3 F B F 7 F 9 FB 11 F 13 F B F 17 F
C:\Users\Максим>php E:\OpenServer\OSPanel\domains\php6\index.php Array ( [0] => 1 [1] => 2 )
Fatal error: Uncaught DivisionByZeroError: Modulo by zero in E:\OpenServer\OSPanel\domains\php6\index.php:12
Stack trace:
#0 [internal function]: fizzBuzz(1, 1)
#1 E:\OpenServer\OSPanel\domains\php6\index.php(22): array_map('fizzBuzz', Array, Array)
#2 {main} thrown in E:\OpenServer\OSPanel\domains\php6\index.php on line 12
В общем там не одна ошибка
Первое array_map("fizzBuzz", $arrResult, $new_handle);
Массивы должны быть одинаковый длины поэтому не второй элемент, который равен 120, а $arrResult = range(1, count($new_handle));
Второе как и говорил не понятно, как приводиться к массиву
// $handleInt = array_map("integer", $handle); //приведение к int
// Warning: array_map(): Argument
// 2 should be an array in /var/www/test.php/ind.php on line 4
Выдавало ошибку, как и говорил дожен быть массив поэтому
http://php.net/manual/ru/function.array-map.php
К примерe я прочитал текст он равен $handle = "3,6,120";
, делаем explode
, $new_handle = explode(",", $handle);
http://php.net/manual/ru/function.explode.php
Тертья у тебя идет не понятно в самой функции, $b[0] или $b[1]
, он делает перебор массивов и берет по значению, получается это integer, а не массив
Четвертое не уверен, но я не понял для чего $a % $b
, это остаток от деления, следовательно выдает число, а любое число >= 1 это true, соответсвенно всегда правиьно, оно должно равняться нулю $a % $b == 0
, тогда ты проверяешь делиться это число или нет.
Итог ты сравнивывываешь не каждое число, поэтому могу только догадываться чего точно ты хотел сделать, но для этого тебе нужно делать цикл
for($i = 0; $i < count($new_handle) - 1 ; $i++) {
echo fizzBuzz($arrResult, $new_handle, $i);
}
А третий параметр это индекс по массиву, а в функцию передаешь массивы
Окончательный результат
$handle = "3,6,120";
$new_handle = explode(",", $handle);
$arrResult = range(1, count($new_handle));
function fizzBuzz ($a, $b){
if (! ($a % $b == 0) && !($a % $b == 0)){//fatal error здесь
return "FB ";
} elseif (!($a % $b == 0)) {
return "F ";
} elseif(! ($a % $b == 0) ) {
return "B";
} else return $a;
}
$t[] = array_map("fizzBuzz", $arrResult, $new_handle);
print_r($t);
Решение затаилось неглубоко, при передаче в array_map второго массива, $handleInt. Вместо этого я объявил массив глобально в функции fizzBuzz.
Вот что получилось)
$handle = file("E:\OpenServer\OSPanel\domains\php6\source.txt");
$handleInt = array_map("integer",$handle);
$arrResult = range(1, $handleInt[2]);
function integer ($a){
return (integer)$a;
}
function fizzBuzz ($a){
global $handleInt;
if (!($a % $handleInt[0]) && !($a % $handleInt[1])){
return "FB ";
} elseif (!($a % $handleInt[0])) {
return "F ";
} elseif(!($a % $handleInt[1])){
return "B";
} else return $a;
}
print_r (array_map("fizzBuzz",$arrResult));
?>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты