2014-10-08 72 views
1

我有使用关联数组,看起来像这样将数据插入表中的方法,包括:将array_keys和array_values组合到原始数组中?

array(
    "col1" => "value1", 
    "col2" => "value2", 
    "col3" => "value3", 
); 

如果我使用array_keys()array_values()通过在阵列上我可以保证,在每一组中的第一项,匹配传入的原始数组?

// Note: validation excluded 
$keys = array_keys($data); // $data is the array passed in 
$values = array_values($data); 
$q  = array_pad(array(), count($data), "?"); 

$this->query("insert into `$this->table` (`" . implode("`,`", $keys) . "`) values (" . implode(",", $q) . ")", $values); 

所以,就这样,我可以保证$keys[1]$values[1]是从原来的阵列相同的密钥和值,或者是有可能,他们可以col3value1

另一种说法是,如果我使用array_combine($keys, $values),我会得到原始数组key => value pair back(不包括项目顺序)?

我很担心,如果这没有做什么,我想,value2可能进入col3,而不是col2或类似的东西....

+1

你为什么不使用'foreach'? – 2014-10-08 16:20:31

+0

我为此使用foreach。 – 2014-10-08 16:20:45

+0

我可以,但这看起来更干净... – 2014-10-08 16:21:47

回答

4

是,功能array_keys($data)array_values($data)将在原有的命令返回的数据。

搜索array_combine()方法的PHP参考站点时,将显示该方法也将它们的原始顺序组合在一起。

例如,

array(
    'red' => 5, 
    'green' => 10, 
    'blue' => 15 
); 

将被划分为键排列:

array(
    'red', 
    'green', 
    'blue' 
); 

和值数组:

array(
    5, 
    10, 
    15 
); 

结合与array_combine这些阵列($键, $值)会给你阵列:

array(
    'red' => 5, 
    'green' => 10, 
    'blue' => 15 
); 

从PHP站点实例

Array Keys PHP reference

<?php 
    $array = array(0 => 100, "color" => "red"); 
    print_r(array_keys($array)); 

    $array = array("color" => array("blue", "red", "green"), 
      "size" => array("small", "medium", "large")); 
    print_r(array_keys($array)); 
?> 

上例将输出:

Array 
(
    [0] => 0 
    [1] => color 
) 
Array 
(
    [0] => color 
    [1] => size 
) 

Array Values PHP reference

<?php 
    $array = array("size" => "XL", "color" => "gold"); 
    print_r(array_values($array)); 
?> 

上面的例子将输出:

Array 
(
    [0] => XL 
    [1] => gold 
) 

Array Combine PHP reference

<?php 
    $a = array('green', 'red', 'yellow'); 
    $b = array('avocado', 'apple', 'banana'); 
    $c = array_combine($a, $b); 

    print_r($c); 
?> 

上面的例子将输出:

Array 
(
    [green] => avocado 
    [red] => apple 
    [yellow] => banana 
) 
+2

这个答案可以通过引用这些页面的相关部分来改进,而不仅仅是链接。欢迎来到Stack Overflow! – 2014-10-08 16:27:22

+0

好的,谢谢!它看起来基本上是有保证的。至少根据“重复”链接。 – 2014-10-08 16:32:34

+0

没问题,@RyanNaddy! 感谢您的改进建议,@LeviMorrison,我从我发布的链接添加了一些片段。 – stevenc4 2014-10-08 16:42:25

0

使用foreach循环,你将永远是肯定的键/值对匹配。正如其他人已经指出,你至少应该逃避输入值和/或使用PDO插入。因为这不是你真正的问题,所以我没有在下面列出。

foreach($array as $k=>$v){ 
//add keys to key array 
$keys[]=$k; 
//add values to value array 
$vals[]=$v; 
} 
+0

请向OP(以及SO的未来访客)解释为什么你做了你所做的事情。 – 2014-10-08 16:24:22