将数组的所有索引放入逗号分隔的字符串中

7

我有一个看起来像这样的数组:

array('first' => 'value1', 'second' => 'value2', ...);

如何获取所有键并将它们放在以逗号分隔的字符串中?

最终,我需要像这样的东西来执行查询:

values IN ('first','second',...)

谢谢


1
array_keys()可以为您完成这个任务。 - Ja͢ck
@Jack 不太对。那会给他们一个键的数组。然后他们必须使用 implode() 函数将其合并。 - Patrick James McDougle
看一下这个问题,它涉及到一个类似的问题。 - Till Helge
@PatrickJamesMcDougle,问题中已经有“implode”标签,因此我的评论应该提供足够的信息。 - Ja͢ck
1
顺便提一下,与其直接注入该字符串,你真的应该确保在这方面使用PDO预处理语句。http://php.net/manual/zh/pdo.prepared-statements.php - Patrick James McDougle
5个回答

17

应该足够了:

echo "'".implode("','", array_keys($array))."'";

因为我太蠢了,所以删除了这条评论。 - Patrick James McDougle
不对,explode = 字符串转数组;implode = 数组转字符串。 - Rufinus
@PatrickJamesMcDougle 这种事情发生在最好的人身上 :D - Rufinus

2
简单的答案是使用array_keys()来获取数组的索引。
然而,由于您正在使用SQL,因此还重要的是正确转义值:
$db = new PDO( ... );
$sql .= "value IN (" . 
        join(', ', array_map(array($db, 'quote'), array_keys($arr))) . ")";

或者,当您更喜欢使用预处理语句时:

$stmt = $db->prepare('... WHERE value IN (' . 
    join(',', array_fill(0, count($arr), '?')) . ')');
$stmt->execute(array_keys($arr));

在我看来,最好使用 VALUE IN (?)->execute(array(implode("','",array_keys($array)) - Rufinus
1
@Rufinus 我不会说好很多,但那是一个不错的选择 :) - Ja͢ck

2

array_keys函数会获取所有的键名,implode函数会将它们组合成一个字符串。

implode("','", array_keys($array));

0
$result = '';
$keys = array_keys($array);

foreach($keys as $key) { 
$result .= $key.',';
}

$result = rtrim($result, ',');

这将导致 first, second 而不是 'first','second' - Rufinus

-1
看一下array_keys。它似乎是你需要的东西。要组合这些键,请使用implode,正如许多其他用户建议的那样:
implode("','", array_keys($array));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接