将array_keys和array_values组合到原始数组


Combining array_keys and array_values to original array?

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

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对吗(项目顺序除外)?

我担心,如果这不起我所想的作用,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;
}