За последние 24 часа нас посетили 22880 программистов и 1260 роботов. Сейчас ищут 645 программистов ...

Не работает функция в foreach.

Тема в разделе "PHP для новичков", создана пользователем thislegion, 1 апр 2023.

  1. thislegion

    thislegion Новичок

    С нами с:
    12 май 2022
    Сообщения:
    16
    Симпатии:
    0
    Вобщем как-то решил сократить повторяющийся код в foreach через функцию и столкнулся с тем что код не работает. Ниже привожу простенький код, который не работает. Скорее всего это особенность php. Подскажите есть ли возможность как-то сократить код в foreach если он повторяется?

    PHP:
    1. function param($value){
    2.  
    3.     // return $value; // так работает
    4.     return $arr2[$value]; // а так нет
    5. }
    6.  
    7. $arr = ['color1'=>'red','color2'=>'yellow'];
    8. $arr2 = ['red'=>'sky','yellow'=>'flower'];
    9.  
    10. // print_r($arr);
    11.  
    12. foreach($arr as $value){
    13.  
    14.     // echo $value , PHP_EOL;
    15.     // echo $arr2[$value] , PHP_EOL; // так работает
    16.     echo param($value) , PHP_EOL;// так не работает
    17. }
     
    #1 thislegion, 1 апр 2023
    Последнее редактирование: 1 апр 2023
  2. dantemgs

    dantemgs Новичок

    С нами с:
    24 дек 2022
    Сообщения:
    47
    Симпатии:
    9
    Читайте ошибки при запуске скрипта.
    В данном случае это: Warning: Undefined variable $arr2 in C:\..
    Функция param ничего не знает о переменной $arr2. Вам нужно передать переменную в функцию.

    PHP:
    1. <?php
    2. function param($value, $arr2)
    3. {
    4.     return $arr2[$value];
    5. }
    6.  
    7. $arr = ['color1' => 'red', 'color2' => 'yellow'];
    8. $arr2 = ['red' => 'sky', 'yellow' => 'flower'];
    9.  
    10. foreach ($arr as $value) {
    11.     echo param($value, $arr2), PHP_EOL;
    12. }
     
    thislegion нравится это.
  3. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    Вообще про область видимости переменных почитайте, и да, в данном случае параметром передать.