2015-07-30 2 views
2

У меня цвет с несколькими избранными атрибутами.implode значение массива

$color = $_product->getAttributeText('color'); 
$output = implode(',', $color); 
echo $output; 

$ color дает значение массива. Если для атрибута цвета имеется несколько значений, скажем 1. синий и 2. зеленый, он печатает синий, зеленый, но когда для цвета $ (например, синий) присутствует только один атрибут, он ничего не печатает.

Это нормальное поведение в случае взрыва? В массиве должно быть несколько значений? Если нет, то как я могу напечатать эти одиночные текущие значения?

+7

Нет, это не нормальное поведение 'implode()'. Каков результат: 'print_r ($ color);' когда вы получаете только одно значение? – Rizier123

ответ

4

Вы можете использовать is_array().

$color = $_product->getAttributeText('color'); 

if (is_array($color)) { 
    $output = implode(',', $color); 
} else { 
    $output = $color; 
} 

echo $output; 
1

Я собираюсь выйти на конечность здесь, но я собираюсь предположить, что если есть одно значение, это строка; строка является недопустимым вводом для implode и поднимет PHP Warning.

В этом случае implode вернет значение null, что объясняет, почему вы ничего не видите.

Поэтому убедитесь, что вы передаете массив в implode во всех случаях.

Редактировать

Если вы не можете увидеть отладочную информацию в вашем развития среды, то вы должны рассмотреть вопрос о создании вашей error_reporting() для отладки кода. Один простой способ сделать это, чтобы добавить следующие строки в верхней части скрипта:

<?php 

error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', true); 

// your code... 

Обратите внимание, что вы не должны включить эти параметры в рабочей среде по соображениям безопасности.

+1

Да, возвращаемое значение - это строка. В этом есть смысл :) – amitshree

0
Hello Dear, 


    $color = 'blue'; 
    $output = implode(',', $color); 
    echo $output; 

It will give you a warning. 

Warning: Invalid arguments passed. 

But it works fine with array 

    $color = array('blue'); 
    $output = implode(',', $color); 
    echo $output; 

Check the return value stored in `$color` and then go ahead. 
Thanks.