使用db值构建的数组与硬编码数组的行为不同

时间:2014-09-18 20:53:31

标签: php mysql arrays

当我使用从db中以逗号分隔的列表中提取的值来形成数组时,我无法使它们的行为与硬编码数组相同。

我认为这是由于数组中的语法是根据db值创建的,特别是这些值不是用引号括起来的,但是我还没有成功地弄清楚如何将它们插入数组本身。

例如,当我运行我在页面底部发布的片段时使用:

数组(硬编码):

$colors_loveArray = array('Black','Charcoal','Light_Gray','White','Royal_Blue','Dodger_Blue','Red');

输出为:

  

Array =' Black'' Charcoal',' Light_Gray',' White' Royal_Blue', ' Dodger_Blue''红色',

     

匹配:黑色

使用从db(逗号分隔列表)获取的值形成的数组:

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {         
    $colors_loveArray[] = $row['colors_love'];
}  

输出为:

  

数组='黑色,木炭,Light_Gray,白色,Royal_Blue,Dodger_Blue,红色',

     

No Match Black


正在运行的代码:

$Color='Black';

echo "$colors_loveArray = ";
foreach ($colors_loveArray as $value) {
    echo "'".$value."',";
}

if (in_array($Color, $colors_loveArray)) {
    echo "Matches: ", $Color;
}
Else {
    echo "No Match ", $Color;
}

3 个答案:

答案 0 :(得分:2)

您需要explode以逗号分隔的字符串。

explode(",", $row['colors_love']);

这将为您提供与硬编码数组相同的功能。

答案 1 :(得分:1)

显然,你的变量$ colors_loveArray包含以下内容:

array(1) "Black,Charcoal,Light_Gray,White,Royal_Blue,Dodger_Blue,Red"

你可能想要使用

打破一个数组
$arr = explode(',', $colors_loveArray);

另外,如果您的CSV文件是多行文件,则需要先将每行分开:

$lines = explode("\r\n", $colors_loveArray); // could be just \r or \n or \r\n as a line separator

答案 2 :(得分:0)

硬编码数组是一个包含7个值的数组,代码显示为CSV。

DB数组似乎是1个CSV值的数组。

"Black"与此数组的唯一值不匹配,即"Black,Charcoal,Light_Gray,White,Royal_Blue,Dodger_Blue,Red"