Функция, которая в качестве параметра принимает массив

Ребята, кто опытные, обращаюсь к вам. Хотела этот массив реализовать через функцию и вывести на экран двумя способами: через return и через echo. Сделать не смогла, только намучилась. Спасибо, кто отзовётся и не оставит запрос без внимания.

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
// error_reporting(E_ERROR | E_WARNING | E_PARSE);

$regions = array(
'Польша' => array('Краков', 'Варшава', 'Лодзь'),
'Франция' => array('Париж', 'Марсель', 'Лион', 'Тулуза'),
'Испания' => array('Барселона', 'Валенсия', 'Сан-Хосе'),
'Чехия' => array('Прага', 'Бенешов', 'Вальтице', 'Бржецлав')

);
foreach($regions as $country => $cities){
echo "<h2>$country</h2>";

for($a = count($cities) - 1; $a >=0; $a--){
echo $cities[$a]. '<br>';
}
}


P.s. Совсем простенькая, вот такая функция мне понятна, а, что сложней пока не могу - только начинаю изучать php. Спасибо.

function square($n) {
echo $n * $n;
}
echo square(5);
echo square(5).'<br>';
 

rasschitai

Новичок
<?php
$regions=array(
'Польша' => array('Краков', 'Варшава', 'Лодзь'),
);

function draw($regions,$returnThat='return'){

$result=false;

foreach($regions as $country => $cities){

$result.="<h2>$country</h2>";

for($a=count($cities)-1;$a>=0;$a--){

$result.=$cities[$a]. '<br>';
}
}

if($returnThat=='return'){

return $result;
}

echo $result
}

как то так ...
 

antson

Новичок
Партнер клуба
@Мария Кирюшина, оператор return не выводит на экран. Функция не должна менять выводной поток (выводить на экран), если это не ее основное назначение.
в общем виде

краткий блок для автодокументатора
/**
* name - делает то-то
* $arr - массив городов по странам
* $flagOut boolean - труе вывод
* return string or false в случае ошибки
*/
тело функции
function name($arr , $flagOut = false){
$r ='' ; // инициализация возвращаемого значения
if(!is_array($arr)) return false;

делаем что нужно
в вашем случае собираем вывод в переменную
$r.='очередной кусок вывода';

if($flagOut) echo $r;
return $r;
}
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Внутри цикла использовать еще один foreach, нахрен выкинуть for.
Перед работой с данными вывести что внутри через print_r или var_dump и понять, как можно итерировать тот или иной массив - для вас это главное сейчас.
 
  • Like
Реакции: WMix
@rasschitai, спасибо!, что не поленился выложить наглядный пример. Нашлось ещё такое решение, если тебе будет интересно:
PHP:
function get_countries_html($regions)
{
    $data = '';

    foreach($regions as $country => $cities)
    {   
        $data .= "<h2>$country</h2>";

        foreach($cities as $city)       
            $data .= $city . '<br>';
   }
  
    return $data;
}

echo get_countries_html($regions);
Похоже это код, о котором упоминал c0dex.
 
Последнее редактирование:
@c0dex, спасибо за совет! Вот это пока не умею: вывести что внутри через print_r или var_dump. Буду благодарна, если объяснишь или подскажешь где это изложено человеко-понятно.
 

AnrDaemon

Продвинутый новичок
http://php.net/print_r
http://php.net/var_dump
@rasschitai, спасибо!, что не поленился выложить наглядный пример. Нашлось ещё такое решение, если тебе будет интересно:
PHP:
function get_countries_html($regions)
{
    $data = '';
    print_r($regions); die();
    foreach($regions as $country => $cities)
    {  
        $data .= "<h2>$country</h2>";

        foreach($cities as $city)      
            $data .= $city . '<br>';
   }
 
    return $data;
}

echo get_countries_html($regions);
Похоже это код, о котором упоминал c0dex.
 
@antson, оператор return не выводит на экран, а возвращает значение - это уже понятно. "Функция не должна менять выводной поток (выводить на экран), если это не ее основное назначение.
в общем виде"
- это не совсем, внеси ясность пожалуйста.
 

AnrDaemon

Продвинутый новичок
Какую букву вам нужно пояснить?…
Если основным назначением функции НЕ ЯВЛЯЕТСЯ "вывод на экран", то она НЕ ИМЕЕТ ПРАВА ничего выводить на экран.
Я не уверен, что именно вы делаете вашим кодом, но мне кажется, что вы ищете шаблонизатор.
 
@AnrDaemon, не совсем так. В самых малопонятных случая мне проще взять готовый кусочек кода и внимательно и усердно разбирать и пытаться понять его, что и буду делать сегодня с твоим кодом. Но так не всегда, что-то бывает понятно сразу.
Очень хочется научиться писать качественный код php.
 

AnrDaemon

Продвинутый новичок
Это как "хочется научиться жить правильно".
Желание, само по себе, похвальное. Но так не бывает, чтобы щёлк - и всё сразу правильно.
Сначала надо научиться жить. Дышать, стоять, ходить…
В вашем случае, надо научиться читать документацию. На ваше счастье, у PHP самая толково организованная документация из всех, что я когда-либо видел.
Чтобы постоянно не бегать в интернет, можете скачать HTML help.
На английском (желательно) http://php.net/get/php_manual_en.chm/from/a/mirror либо на русском http://php.net/get/php_manual_ru.chm/from/a/mirror
 

AnrDaemon

Продвинутый новичок
:D Не знаю, куда они русское зеркало дели, но сам хелп русский… местами.
Качайте с любого зеркала.
 

AnrDaemon

Продвинутый новичок
Если нет желания/возможности возиться с IDE, а редактор позволяет подключать помощь, это на самом деле удобно.
Все функции всех библиотек не упомнишь.
 

WMix

герр M:)ller
Партнер клуба
а как называется С(стать)ПВПФ
 
Последнее редактирование:
Сверху