Как отобразить str_replace, только если массив существует в результатах

1

Я очень любитель, когда речь идет о PHP, так что, надеюсь, это имеет смысл. У меня есть следующий цикл foreach, который извлекает все "кредиты", которые связаны с музыкальным исполнителем, используя этот идентификатор исполнителя (микшер, продюсер, аранжировщик, композитор и т.д.). Я хочу иметь возможность заменить разные кредитные имена чем-то более "удобным для списка". Попытка ниже работает, но она только циклы, пока она не попадает в кредит, который не связан с художником, а затем останавливается.

<?php function getSkills($id)
{
    $query = "SELECT c2a.credit_id, cr.credit_name
FROM  'Credit_To_Artist' AS c2a
INNER JOIN  'Credits' AS cr ON cr.credit_id = c2a.credit_id
INNER JOIN  'Artist' AS a ON a.artist_id = c2a.artist_id
WHERE c2a.artist_id = $id
GROUP BY c2a.credit_id
ORDER BY cr.credit_name";

    $res = mysql_query($query);

    while ($row = mysql_fetch_assoc($res)) {
        $skills[] = $row;
    }

    return $skills;

}
?>

<?php foreach (getSkills($id) as $skill): ?>

    <?php echo str_replace(
            array('arranger','mixer','producer','composer','engineer','mixer','recorder','vocalist','writer'),
            array('song arrangement','audio mixing','music production','music/vocal recording','song writing','singing/performance'),
            $skill['credit_name']); ?><br />

<?php endforeach; ?>

Как мне добавить добавление оператора if в код, чтобы он заменял только "массив", который находится в результате?

  • 0
    Вы не экранируете вывод правильно (при условии, что вы создаете ответ HTML); кроме того, в самом коде нет ничего неправильного ... действительно ли getSkills($id) возвращает правильное количество данных?
  • 0
    Вы можете добавить данные в $skill['credit_name'] ? Сделаю это более понятным.
Показать ещё 1 комментарий
Теги:
foreach
echo
str-replace

5 ответов

0
Лучший ответ

Спасибо за все ответы, я возился с предложениями и понял, что я не указал достаточно оригинального credit_name в первом массиве, чтобы он соответствовал второму. И он также должен быть строкой, потому что if(is_string) работает, а if(is_array) - нет. (Как я сказал, все еще очень зеленый для всего этого!)

<?php foreach (getSkills($id) as $skill): ?>

    <?php if(is_string($skill['credit_name'])) {
    echo str_replace(
            array('arranger','mixer','producer','composer','engineer','recorder','vocalist','writer'),
            array('song arrangement','audio mixing','music production','song composition','music engineering','music/vocal recording','singing/performance','song writing'),
            $skill['credit_name']);
    echo "<br />";
    } ?>
<?php endforeach; ?>
  • 0
    Итак, это решает вашу проблему? Если да, примите, пожалуйста, свой ответ
  • 0
    Да, я пытался, но он сказал мне, что я должен ждать, чтобы принять это завтра
1

Добавьте проверку, если $skill['credit_name'] является массивом или нет -

if(is_array($skill['credit_name'])) {
    // Your code
}
0

Вы можете добиться этого, выполняя,

$result = getSkills($id);

$search = array('arranger','mixer','producer','composer','engineer','mixer','recorder','vocalist','writer');
$replace = array('song arrangement','audio mixing','music production','music/vocal recording','song writing','singing/performance');

foreach($result as &$v)
{
    $v['credit_name'] = str_replace($search,$replace,$v['credit_name']);
}

Теперь $result содержит замененные строки.

0

Вы не делаете ничего помимо оценки навыков внутри этого foreach(), вы можете поместить весь блок снаружи, как $skill['credit_name'] ниже, если $skill['credit_name'] является строкой,

<?php if(is_array(getSkills($id)): ?>
<?php foreach (getSkills($id) as $skill): ?>
<?php if(is_string($skill['credit_name']) && $skill['credit_name']!=''): ?>


<?php echo str_replace(
        array('arranger','mixer','producer','composer','engineer','mixer','recorder','vocalist','writer'),
        array('song arrangement','audio mixing','music production','music/vocal recording','song writing','singing/performance'),
        $skill['credit_name']); ?><br />

<?php endif?>
<?php endforeach?>
<?php endif?>
0

Вы можете сделать это, используя функцию is_array вместе с count как

if(is_array($skill['credit_name']) && count($skill['credit_name']) > 0){
    echo str_replace(array('arranger','mixer','producer','composer','engineer','mixer','recorder','vocalist','writer'), array('song arrangement','audio mixing','music production','music/vocal recording','song writing','singing/performance'), $skill['credit_name']);
}
  • 0
    Downvoter причина для downvote

Ещё вопросы

Сообщество Overcoder
Наверх
Меню