2013-05-22 76 views
1

我在PHP獲取一個陣列的鍵,其中值不爲NULL在PHP

$a = array("d1" => "data", "d2" => NULL, "d3" => "data") 

關聯數組我想所有按鍵和所有非NULL值,以爆他們:

// e.g.: 
$sub_key = array_keys($a, keys != NULL); 
$sub_values = array_values($a, values != NULL); 

echo "`".implode("`,`", $sub_key)."`"; 
echo "'".implode("','", $sub_key)."'"; 

是否有功能,如array_keys()array_values(),允許採取只做匹配模式瓦萊斯?

+0

開始['array_filter()'](http://us1.php.net/manual/en/function.array-filter.php),默認會返回任何評價FALSE(不僅僅是空值); –

+0

使用'array_filter'查找所有匹配的值,然後在過濾後的結果中使用'array_keys'和'array_values'。 – DCoder

+0

您的預期輸出是什麼? – Baba

回答

2

使用array_filter使用array_keys和過濾陣列這樣

$newArray = array_filter($a); 

然後做

$sub_key = array_keys($newArray); 
$sub_values = array_values($newArray); 
+1

所以,'FALSE',' ''','陣列()','0'被丟棄那麼,不只是'NULL'? – Wrikken

+3

小心,這也將刪除值等FALSE,空字符串,零,等等 –

+0

一個具有以限定自己的回調函數如在array_filter例子。 –

1

你可以使用array_filter($a),但作爲一個評論上文所指出的,這也將過濾器之前輸出值如FALSE,空字符串等,所以我會使用一個foreach循環。

$new_array = array(); 

foreach ($a as $key => $value) { 
    if (is_null($value) === false) { 
     $new_array[$key] = $value; 
    } 
} 
0
$sub_key = array(); 
$sub_values = array(); 
foreach ($a as $key => $value) { 
    if (!is_null($key) && !is_null($value)) { // you can also do is_empty() in stead of is_null() if you also wan't to avoid empty string 
     $sub_key[] = $key; 
     $sub_values[] = $value; // or use mysql_real_escape_string($value) if you are going to create a query with this! Otherwise you will create an SQL injection vulnerability here. 
    } 
} 

// you can add if(count($sub_key)) here to only do the echoes, if there was at least 1 item in the array. Otherwise you will echo an empty `` 
echo "`".implode("`,`", $sub_key)."`"; 
echo "'".implode("','", $sub_key)."'"; // don't you mean $sub_values here? 
+0

如果您要使用它來創建查詢,請注意,最好將參數化您的查詢,而不是像這樣構建查詢。 –

+0

怎麼樣?我想執行一個INSERT。一開始我不知道,這colums獲取值,... http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php給了PDO爲例,和HTTP ://stackoverflow.com/questions/10884820/mysqli-insert-into-prepare-error只爲固定列提供exapmle。 http://php.net/manual/de/mysqli.prepare.php只有選擇,並且只添加了一個值。 –

+0

@JohnGarreth說實話,我還沒有寫出列名自己參數化的查詢。與此同時,通過使用mysql_real_escape_string()來幫助你更進一步,正如我在評論中提出的建議。 (如果您使用的是mysqli_ *函數,則應該使用mysqli_real_escape_string()。) –

相關問題