Заменить элементы массива

mychatik

Support
Команда форума
Регистрация
26.05.15
Сообщения
520
Реакции
454
Баллы
63
Решил заполнить атрибут alt у знаков зодиака в профиле.

Так сделано по умолчанию.
PHP:
  $zpic = getZodiac($current_user->b_day, $current_user->b_month);
           echo '<img src="'.$current_design.'zodiac/'.$zpic.'.gif" alt="">';
Для информации: У меня в функции getZodiac из zodiac.php, в отличие от стандарта, не передаётся расширение картинки.

Делаю так:
PHP:
           $zpic = getZodiac($current_user->b_day, $current_user->b_month);
           $zpcs = array('kozerog','vodolei','ribi','oven','telec','blizneci','rak','lev','deva','vesi','scorpion','strelec','zodiac');
           $zals = array('Козерог','Водолей','Рыбы','Овен','Телец','Близнецы','Рак','Лев','Дева','Весы','Скорпион','Стрелец','Зодиак');
          if (in_array( $zpic, $zpcs, true)):
           $zalt = array_replace($zpcs, $zals); endif;
           echo '<img src="'.$current_design.'zodiac/'.$zpic.'.gif" alt="'.$zalt.'">';

Логика такова:
Имеем 2 массива $zpcs и $zals.
Если значение $zpic есть в $zpcs, то заменяем его на $zals и подставляем в alt="".

Но не получается... :(((
В итоге имеем ошибку alt="Array":
HTML:
<img src="http://mychatik.ru/designes/mychatik/zodiac/blizneci.gif" alt="Array">

Пробовал убирать проверку if, менять в массиве кавычки одинарные на двойные... Никаких изменений.
Если сделать замену так:
PHP:
$zalt = array_replace($zpic, $zals);
то alt="" прописывается без значения.

На PHPTESTER - Test PHP code online пробовал - замена работает...
PHP:
           $zpcs = array('kozerog','vodolei','ribi','oven','telec','blizneci','rak','lev','deva','vesi','scorpion','strelec','zodiac');
           $zals = array('Козерог','Водолей','Рыбы','Овен','Телец','Близнецы','Рак','Лев','Дева','Весы','Скорпион','Стрелец','Зодиак');
           $zalt = array_replace($zpcs, $zals);
          print_r($zalt);

PHP:
 Array ( [0] => Козерог [1] => Водолей [2] => Рыбы [3] => Овен [4] => Телец [5] => Близнецы [6] => Рак [7] => Лев [8] => Дева [9] => Весы [10] => Скорпион [11] => Стрелец [12] => Зодиак )

В чём же моя ошибка?
И можно ли делать замену без дополнительного массива $zpcs, а сразу проверяя и подменяя значение $zpic?

Была уже идея просто переименовать все картинки правильными названиями знаков зодиака и выводить $zpic и в img, и в alt.
Но, блин, хочется подписи на русском языке сделать, а не на английском.
 
Последнее редактирование:

Rain

Администратор
Команда форума
Регистрация
04.09.14
Сообщения
369
Реакции
322
Баллы
63
Возраст
29
$zalt у тебя после array_replace() стает типом array, что собственно и выводится.
Если я правильно понял задумку - есть более просто решение - ассоциативный массив.
PHP:
$zpic = getZodiac($current_user->b_day, $current_user->b_month); //$zpic = 'kozerog';
$zpcs = array(
    'kozerog' => 'Козерог',
    'ribi' => 'Рыбы',
    .....
    'zodiac' => 'Зодиак'
);

$zalt = (isset($zpcs[$zpic]))?$zpcs[$zpic]:"";
var_dump($zalt); //string(14) "Козерог"
 
Сверху Снизу