$string = "php, photoshop, css";
我使用str_getcsv()
函数从上面的逗号分隔值生成数组:
$array = str_getcsv($string);
结果:
Array ( [0] => php [1] => photoshop [2] => css )
如何为所有元素替换字符串tag
的键整数?如下所示?
Array ( [tag] => php [tag] => photoshop [tag] => css )
编辑:如果不可能,我可以申请哪种替代方案?对于具有多个OR
子句
e.g。
SELECT * FROM ('posts') WHERE 'tag' LIKE '%php% OR 'tag' LIKE '%photoshop% OR 'tag' LIKE '%css%'
我通过一个函数生成查询,该函数使用数组键作为列名称和值作为条件。
答案 0 :(得分:4)
这是不可能的。每个键只能有一个项目。但在您的示例中,字符串“tag”将是每个项目的关键。
arround的另一种方式可行。所以有这样的数组:
array('php' => 'tag', 'photoshop' => 'tag', 'css' => 'tag');
如果要保存数组中每个条目的“类型”,这可能对您有所帮助。但是由于数组的所有条目似乎来自同一类型,只需忘记“标记”并仅将值存储在数值数组中。
或者您可以在数值数组中使用多维数组来保存类型:
array(
0 => array( 'type' => 'tag', 'value' => 'php' ),
1 => array( 'type' => 'tag', 'value' => 'photoshop' ),
2 => array( 'type' => 'tag', 'value' => 'css' )
);
但如果所有条目都具有相同的类型,那么仍然只使用数字数组应该没问题。我甚至可以想到最后一个:
array(
'tag' => array('php', 'photoshop', 'css')
);
但即使我重复一遍:只需使用一个普通的数组,并将其命名为$tag
!
BTW:explode(', ', %string)
是拆分字符串的更常见功能。
要构建SQL语句,您可以执行以下操作:
// ... inside you build function
if(is_array($value)){
$sql .= "'".$key."' LIKE '%."implode("%' OR '".$key."' LIKE '%", $value)."%'";
} else {
$sql .= "'".$key."' LIKE '%".$value."%'";
}
这可能看起来令人困惑,但它比运行两个构建查询的foreach循环更清晰。
答案 1 :(得分:1)
那不行。您的数组键必须是唯一的,否则后续添加只会覆盖以前的键。
答案 2 :(得分:1)
假设您事先知道阵列的大小
$tags = array("tag1","tag2","tag3");
$data = array("php","photoshop","css");
$myarray = array();
for ($i=0; $i<count($data); $i++) {
$myarray[$i] = array($data[$i], $tags[$i]);
}
然后
echo $myarray[0][0] . ", " . $myarray[0][1];
输出:
php, tag1
答案 3 :(得分:1)
正如其他人所说,钥匙必须是独一无二的。否则,如果您访问$arr['tag']
,应返回哪个元素?如果你现在说“all all them”,那么创建一个嵌套数组:
$array = array();
$array['tag'] = str_getcsv($string);
值$array['tag']
将是具有数字键的另一个数组(您已经拥有的数组)。这样做,因为你有一个标签列表,列表也可以表示为数组。
如果您想使用PHP,了解数组非常重要,因此我建议您阅读array manual。