Обучающий курс Михаила Русакова. Раздел "Основы PHP". Тема урока "Массивы". Думаю многим знаком этот курс и возможно данная задача тоже. Но у меня не получается решить, больше чем первые два задания: 1) Создайте массив из трех значений: "два", "один", "три". 2) Создайте функцию, которая принимает число в виде строки, а возвращает само число. НАпример, получена строка "два", а возвращается число 2. Код (Text): $array = array (2 => "dva", 1=> "odin", 3=> "tri"); function chislo ($array) { foreach ($array as $k => $v) { echo "$v = $k<br />"; } } $chislo = chislo($array); 3) Создайте массив из 100 элементов. Значение каждого элемента должно высчитываться по правилу: (номер_итерации*х), где х - это число, возвращаемое функцией, созданной во 2-ом пункте. Параметр для функции - это элемент массива, созданного в 1-ом пункте, где индекс равен остатку от деления на 3 номера итерации. 4) Выведите получившийся массив, используя цикл for. 5) Создайте ассоциативный массив, где ключи имеют значение: "один", "два" и "три", а значение 1, 2 и 3 соответственно. Вот примерное представление третьего задание. А без него и остальные не решить: Код (Text): function parametr ($array) { $parametr = 0; foreach ($array as $k=>$v) { $parametr = $k%count($array);//где индекс равен остатку от деления на 3 номера итерации } return $parametr; } $parametr = parametr($array); function array100 ($parametr) { //Создайте массив из 100 элементов. Параметр для функции - это элемент массива, созданного в 1-ом пункте $chislo = chislo ($array); $znachElem = 0; foreach ($array as $k=>$v) { $znachElem = $k * $chislo; //Значение каждого элемента должно высчитываться по правилу: (номер_итерации*х), где х - это число, возвращаемое функцией, созданной во 2-ом пункте } return $znachElem; } $znachElem = array100 ($array);
Ну явно код неверен. Это лишь мое предположение решения данной задачи. Потому хочу узнать мнения более грамотного кодера, правильно ли строится начало? или копать в другом направлении? Я не смотрел курсы Попова по ПХП.
Всё нормально, тут дело в том, что есть задача и она обычно на мелки под задачи делиться, вот я и спрашиваю в чём проблема, что конкретно не получается сделать. Как задача будет решена, сможем уже и об оптимальности её решения поговорить. Может не получается 100 элементов в массив добавить или что-то дальше? --- Добавлено --- Это я про третий пункт, правильно ли я понял что с ним затык
Да. Все верно Дело в том, что я не могу даже понять этот вопрос в некоторых моментах. Например: - "Создайте массив из 100 элементов. Значение каждого элемента должно высчитываться по правилу..." - Нужно создавать массив или же функцию с циклом, которая будет создавать элементы массива? - "где х - это число, возвращаемое функцией, созданной во 2-ом пункте." - Во втором пункте функция возвращает три числа. Какое число брать? - "Параметр для функции - это элемент массива, созданного в 1-ом пункте..." - Массив созданный в 1-ом пункте опять таки имеет три элемента. Какой элемент брать? - "где индекс равен остатку от деления на 3 номера итерации." - Просто не врубился. Понимаю, что данные вопросы нужно адресовать не вам, а Михаилу. Но все таки, быть может с высоты вашего опыта вопросы могут показаться, смешными и не сложными
Всё ясно описано. Идёшь циклом от 0 до 99 (вариант, от одного до 10). Пускай это будет $i. Берёшь $i % 3 (остаток от деления), пусть это будет $c, потом берёшь элемент массива на шаге 1 с таким индексом, и пропускаешь через функцию шага 2 (кстати, что за бред вы написали в коде? Там же не сказано вывести массив в задаче). Ну и т.д. Включайте голову. Пересмотрите курс (раз такое задание дали, значит должны были объяснять, что значит вернуть из функции результат), а лучше почитайте доки. Нарисуйте блок-схему задачи 2.
То есть я не верно решил уже вторую задачу? Вот два других варианта решения второго задания. Верны ли они? Вариант № 1 Код (Text): $array = array ("dva", "odin", "tri"); function chislo ($array) { foreach ($array as $k=>$v) { if ($v == "dva") { $v = 2; } else if ($v == "odin") { $v = 1; } else if ($v == "tri") { $v = 3; } } return $v; } Вариант № 2 Код (Text): function chislo ($array) { foreach ($array as $k=>$v) { switch ($v) { case "dva": $v = 2; break; case "odin": $v = 1; break; case "tri": $v = 3; break; } } return $v; }
Вы вообще не въехали в условие задачи. Я должен вызвать вашу функцию со строкой, и получить число. Т.е. PHP: echo chislo("odin"), ",", chislo("dva"); должно дать ответ Код (Text): 1, 2 Я же говорю, нарисуйте сначала блоксхему http://pro-prof.com/archives/1462 Вам достаточно буквально первых 5-6. Циклы рекомендую прорисовывать просто условием, приближает понимание, как они работают. Фактически, задача-то на поиск в массиве, т.е. есть массив $a, есть строка $s, надо найти в массиве строку $s, и вернуть её ключ. Есть для этого в php вообще стандартная функция, но здесь, я думаю, для развития задано написать её самостоятельно. Там, вообще говоря, строчки 4 будет. Хочется поэтому, чтобы вы сами додумались
С блок схемами не работал ни разу. Хотя давно хочу заняться этим вопросом. Но все ни как не могу найти время. Благодарю за ссылку. Можете уточнить, что имели ввиду? А не просто это как? Вот и я хочу, разобрать суть, понять логику, потому пробую разные варианты. Лучше уж разобрать (пусть даже чужой и готовый) скрипт, но без стандартных функций. Чем пользоваться этими самыми готовыми функциями созданными PHP. Вот кстати новый вариант решения второго задания. При вызове функции со строкой, возвращающий число: Код (Text): $array3 = array ("dva", "odin", "tri"); function chislo ($chislo) { if ($chislo == "dva") { return 2; } else if ($chislo == "odin") { return 1; } else if ($chislo == "tri") { return 3; } } echo chislo("odin"), ",", chislo("dva");
Ну функция более-менее адекватная. Задачу выполняет, по крайней мере. Только лучше ставить строгое равенство (===), для надёжности. Хотя я думал, что суть этой задачи в поиске по массиву, но потом посмотрел в каком порядке элементы в массиве, и засомневался. ОК, теперь давайте дальше разбирайтесь.
внутри функции должен быть тупо ассоциативный массив --- Добавлено --- в том-то и соль задания --- Добавлено --- вся идея изучения массивов состоит в том, чтобы научиться ими пользоваться
Вот решение третьего задания: Код (Text): for ($i=0; $i<100; $i++) { $i*chislo($array3[$i%3]); } Буду искать вариант построения функции через массив
искать? Очевидно же, что это должен быть ассоциативный массив. Это такой массив, у которого ключи - это слова. А тебе по слову нужно вывести число. Или я что-то не уловил?
Ну вот в самом начале, я указал решение данного задания через массив: Код (Text): $array = array (2 => "dva", 1=> "odin", 3=> "tri"); function chislo ($array) { foreach ($array as $k => $v) { echo "$v = $k<br />"; } } $chislo = chislo($array); Но вроде как ни то оказалось. При вызове функции, в аргументе, что нужно передавать? Слово "odin" или название массива?
Перевожу на русский. Умножить переменную $i на результат вызова функции chislo, а результат выкинуть в мусор
Забыл записать результат в переменную Код (Text): for ($i=0; $i<100; $i++) { $array100[] = ($i*chislo($array3[$i%3])); } Вот первые пять заданий общей задачи: 1. Создайте массив из трех значений: "два", "один", "три". 2. Создайте функцию, которая принимает число в виде строки, а возвращает само число. Например, получена строка "два", а возвращается число 2. 3. Создайте массив из 100 элементов. Значение каждого элемента должно высчитываться по правилу: (номер_итерации*х), где х - это число, возвращаемое функцией, созданной во 2-ом пункте. Параметр для функции - это элемент массива, созданного в 1-ом пункте, где индекс равен остатку от деления на 3 номера итерации. 4. Выведите получившийся массив используя цикл for 5. Создайте ассоциативный массив, где ключи имеют значения: "один", "два" и "три", а значения 1, 2 и 3 соответственно
Код (Text): function chislo ($chislo) { if ($chislo == "dva") {return 2;} else if ($chislo == "odin") {return 1;} else if ($chislo == "tri") {return 3;} } Как я понял - это не вариант?