当我使用从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;
}
答案 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"
。