2

複数の名前付きキーがあり、それぞれに 0 ~ 5 の値が割り当てられます。

値 > 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 = key, value = value に挿入する必要があります。

何か案は?

編集

アドバイスを受けた後、すべてが正しく機能しているようです。

現在、名前にスペースが含まれるキーにはデフォルトでアンダースコアが付けられるという問題があります。

例: Animal Ken --> Animal_Ken .. そのため、データベースは挿入を拒否しています。

アンダースコアを取り除き、再びスペースとして残す方法はありますか?

4

3 に答える 3

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));
}
于 2012-12-14T17:15:23.083 に答える
1

MrCodeが示唆したように、foreachが進むべき道です。以下の組み込みのmysqli_queryPHP関数を使用する手続き型アプローチを参照してください。

// 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);
于 2012-12-14T17:54:13.307 に答える
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]);
    }
}

ここにある関連記事にこれを投稿してくれたPasserbyへの小道具:

于 2012-12-17T01:13:06.327 に答える