2014-10-08 20 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