2012-12-14 97 views
2

我有多个命名密钥和每个被分配0和5插入数组键作为字段值 - 的MySQL/PHP的

之间的值我已经创建了一个阵列和阵列滤波器只保留具有键被赋值> 0。从数组中删除任何0值对。

我需要的是一种方法来将键名和值分配为单独的字段在同一个表中。

列名是skill_name和value。

阵列之后提交:过滤后

Array ([Academics] => 2 [Animal_Ken] => 3 [Athletics] => 2 [Awareness] => 0 [Blood_Sense] => 0 [Brawl] => 0 [Craft] => 0 [Dodge] => 0 [Empathy] => 0 [Enigma] => 0 [Etiquette] => 0 [Expression] => 0 [Finance] => 0 [Firearms] => 0 [Intimidation] => 0 [Investigation] => 0 [Larceny] => 0 [Law] => 0 [Leadership] => 0 [Linguistics] => 0 [Malkavian_Time] => 0 [Medicine] => 0 [Melee] => 0 [Occult] => 0 [Performance] => 0 [Politics] => 0 [Science] => 0 [Scrounge] => 0 [Security] => 0 [Stealth] => 0 [Streetwise] => 0 [Subterfuge] => 0 [Survival] => 0 [submit_skills] => Add Skills)

阵列:

Array ([Academics] => 2 [Animal_Ken] => 3 [Athletics] => 2)

现在我需要插入skill_name为每个阵列索引=键,值=值。

任何想法?

编辑

服用他们给我的一切意见后似乎正常工作十岁上下。

现在我遇到了这样的问题,即名称中有空格的任何键在缺省情况下都会被赋予下划线。

例如:Animal Ken - > Animal_Ken ..数据库因此拒绝插入。

任何方式去除下划线并将其留作空间吗?

回答

4

使用foreach并包含密钥。

例与PDO参数化查询:

$stmt = $db->prepare("INSERT INTO table(skill_name, value) VALUES(:skill_name,:value)"); 

foreach($myArray as $key => $value) 
{ 
    // insert: $key = Academics, $value = 2 
    $stmt->execute(array(':skill_name ' => $key, ':value' => $value)); 
} 
+0

谢谢各位大大MrCode。当我刚开始使用PHP和MySQL路径时,我真的需要查看准备好的语句。 –

+0

事实上,MrCode作为他的答案的道具引入了2个最佳实践,包括使用PDO来标准化数据库使用,并准备了更高性能和更好安全性的语句。 – Eric

1

由于MrCode建议,是的foreach要走的路。查看使用下面的内置mysqli_query PHP函数的过程方法。

// start building query 
$q = "INSERT INTO table (skill_name, value) VALUES"; 

// loop through array, adding values to query 
foreach($array as $key => $value) { 
    $q .= " ('$key', $value),"; 
} 

// remove the last comma 
$q = substr($q, 0, -1); 

// run query 
mysqli_query($your_db_connection, $q); 
+0

感谢一吨埃里克。 –

0

找到了我编辑的答案。

function fixArrayKey(&$arr) 
{ 
    $arr=array_combine(array_map(function($str){return str_replace("_"," ",$str);},array_keys($arr)),array_values($arr)); 
    foreach($arr as $key=>$val) 
    { 
     if(is_array($val)) fixArrayKey($arr[$key]); 
    } 
} 

道具路人在一篇相关文章发布此发现here