将array_keys和array_values组合到原始数组中?

时间:2014-10-08 16:16:16

标签: php arrays

我有一个方法,使用如下所示的关联数组将数据插入表中:

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或类似的事情......

2 个答案:

答案 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网站上的示例

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
)

答案 1 :(得分:0)

使用foreach循环,您将始终确保键/值对匹配。正如其他人所指出的,你至少应该逃避输入值和/或使用PDO进行插入。我还没有把它包含在下面,因为那不是你真正的问题。

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