我有一个方法,使用如下所示的关联数组将数据插入表中:
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
和{{ 1}}?
另一种说法,如果我使用value1
,我会将原始数组array_combine($keys, $values)
对(项目顺序排除在外)?
我担心如果这不符合我的想法key => value
可能会进入value2
而不是col3
或类似的事情......
答案 0 :(得分:5)
是的,函数array_keys($data)
和array_values($data)
将按原始顺序返回数据。
搜索array_combine()
方法的PHP参考站点将显示该方法也按原始顺序组合数组。
例如,
array(
'red' => 5,
'green' => 10,
'blue' => 15
);
将被拆分为keys数组:
array(
'red',
'green',
'blue'
);
和values数组:
array(
5,
10,
15
);
将这些数组与array_combine($ keys,$ values)组合将为您提供数组:
array(
'red' => 5,
'green' => 10,
'blue' => 15
);
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
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>
以上示例将输出:
Array
(
[0] => XL
[1] => gold
)
<?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
)
答案 1 :(得分:0)
使用foreach循环,您将始终确保键/值对匹配。正如其他人所指出的,你至少应该逃避输入值和/或使用PDO进行插入。我还没有把它包含在下面,因为那不是你真正的问题。
foreach($array as $k=>$v){
//add keys to key array
$keys[]=$k;
//add values to value array
$vals[]=$v;
}