我有一个方法,可以使用如下所示的关联数组将数据插入表中:
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]
是原始数组中相同的键和值吗?或者它们可能是col3
和value1
吗?
另一种说法是,如果我使用array_combine($keys, $values)
,我会拿回原始数组key => value
对吗(项目顺序除外)?
我担心,如果这不起我所想的作用,value2
可能会进入col3
,而不是col2
或类似的东西。。。。
是的,函数array_keys($data)
和array_values($data)
将按原始顺序返回数据。
在PHP参考网站上搜索array_combine()
方法会发现,该方法也按原始顺序组合了数组。
例如,
array(
'red' => 5,
'green' => 10,
'blue' => 15
);
将被拆分为密钥阵列:
array(
'red',
'green',
'blue'
);
和值数组:
array(
5,
10,
15
);
将这些数组与array_component($keys,$values)组合将得到数组:
array(
'red' => 5,
'green' => 10,
'blue' => 15
);
PHP站点的示例
数组键PHP参考
<?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
)
数组值PHP参考
<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>
上面的例子将输出:
Array
(
[0] => XL
[1] => gold
)
数组组合PHP引用
<?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
)
使用foreach循环,您将始终确保键/值对匹配。正如其他人所指出的,您至少应该转义输入值和/或使用PDO进行插入。我没有在下面包括这些,因为这不是你真正的问题。
foreach($array as $k=>$v){
//add keys to key array
$keys[]=$k;
//add values to value array
$vals[]=$v;
}