用字符串替换数组键整数

时间:2011-07-01 18:51:09

标签: php arrays string

$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%'

我通过一个函数生成查询,该函数使用数组键作为列名称和值作为条件。

4 个答案:

答案 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