-1

現在、友人とサービス スクリプトに取り組んでいます。サービス スクリプトとは、データベースへの値の更新と追加にのみ使用されることを意味します。今、私の友人はすぐにすべての彼女をデータベースの値として配列として保存しました。

私はすでに配列の 1 つを入力することに成功していますが、複数の配列に対してどのようにそれを行うことができるかについて混乱しています。全体として、これは現在のコードをより動的なものにリファクタリングする方法についての質問です。

また、心に留めておいてください、彼女はこれを行う必要がある数百の配列を持っているので、文字通り数百の 2 や 3 とは異なります。

私の更新されたコード:(コメントを読んでください)

$colors['Colors_All'] = array("Black","Charcoal"); // Add unique indexes
$colors['Colors_Bright_All'] = array("Silver","White"); // Add unique indexes

$AllArrays = get_defined_vars(); // Get all defined vars
$Arrays = array(); // Set a default array

foreach ($AllArrays as $varName => $value) { // Run through all the variables set in AllArrays
        if(is_array($value) && $varName == 'colors') { // If array is colors then
                $Arrays = array_merge($Arrays, $value); // Merge those arrays into the new array
        }
}

var_dump($Arrays);

$sql = "INSERT INTO `product_features` ("; // Create the initial query

foreach ($Arrays as $column => $value) { // ForEach over the array
        $sql .= "$column,"; // Use the Key Example : 'Colors_All and Color_Bright_All' as a column name
}

$sql2 = rtrim($sql, ","); // trim the initial "," from the columns at the end
$sql2 .= ")"; // Close off the columns names
$sql2 .= " VALUES ";

foreach ($Arrays as $column => $value) { // This is where the problem starts -_-
        foreach ($value as $key => $insert) { // Get the value
                $sql2 .= "('$insert', '$insert'),"; // I need to have unique values here :(
        }
}

$finSQL = rtrim($sql2, ","); // Strip off the remaining ","

また、パラメーターをバインドしていないこともわかっています。実際の難しいものをいったん取り出します。

$finSQL のダンプを実行すると、次のようになります。

string(152) "INSERT INTO `product_features` (Colors_All,Colors_Bright_All) VALUES ('Black', 'Black'),('Charcoal', 'Charcoal'),('Silver', 'Silver'),('White', 'White')"

挿入クエリで一意の値を VALUES にするにはどうすればよいですか? それが私を混乱させている最後の部分です。

4

6 に答える 6

1

$Colors_Bright_All、$Colors_Light_All を 1 つの最終的な配列に入れ、$finalArray と言って foreach ループを使用してその配列をループし、その中で既存の foreach ループを実行します。

于 2013-04-20T05:02:36.077 に答える
0

さて、各配列をシリアル化し、実際の配列インデックスをデータベース内の一意の識別子として使用することで、次のように「完了」しました。

<?php
ini_set("error_reporting", E_ALL);
ini_set("display_errors", TRUE);

$conn = new MysqlI("HOST", "USER", "PASSWORD", "DATABASE" /*Optionally put the PORT NUMBER HERE : , 3306 */);    
$conn->set_charset('utf8'); // Always explicitly state the character encoding!

$clearSQL = "TRUNCATE TABLE `product_features`;";
$clearNOW = $conn->prepare($clearSQL);// For updating this will delete all records in the table
$clearNOW->execute();

$colors['Colors_All'] = array("Black", "Charcoal", "Pink", "Cheese", "Dog", "Punk"); // Add unique indexes
$colors['Colors_Bright'] = array("Silver", "White", "Yellow", "Blue", "Indigo"); // Add unique indexes
$colors['Colors_Bright_All'] = array("Silver", "White", "DarkYellow", "Dark_Pink",); // Add unique indexes
$colors['Colors_Dark'] = array("Silver", "White", "DarkWE", "DarkCheese", "DarkBla"); // Add unique indexes
$colors['Colors'] = array("Silver", "White", "DarkIDK", "DarKsome", "waDark", "dark"); // Add unique indexes
$colors['Colors_Green'] = array("Silver", "White", "WAA", "WIWIW", "OMG", "Blood"); // Add unique indexes
$colors['Colors_Red'] = array("Silver", "White", "IRI", "owow", "Darkness", "night"); // Add unique indexes

$AllArrays = get_defined_vars(); // Get all defined vars
$Arrays = array(); // Set a default array

foreach ($AllArrays as $varName => $value) { // Run through all the variables set in AllArrays
    if (is_array($value) && $varName == 'colors') { // If array is colors then
       $Arrays = array_merge($Arrays, $value); // Merge those arrays into the new array
    }
}

$sql = "INSERT INTO `product_features` (`ArrayIndex`, `ArrayValues`) VALUES "; // Create the initial query

foreach ($Arrays as $ArrayIndex => $Arrayvalues) { // ForEach over the array
     $sql .= "('$ArrayIndex','" . $mysqli->mysqli_real_escape_string(serialize($Arrayvalues)) . "'),"; // Use Array Index as the Unique Array Identifyer and Arrayvalues for the value
}

$finSQL = rtrim($sql, ","); // Strip off the remaining ","

var_dump($finSQL); // Check the query

$INSERT = $conn->prepare($finSQL); // Get query ready
$INSERT->execute(); // Execute

?>

そして、データベース内のその結果はこれです

于 2013-04-24T12:07:30.867 に答える
0

上記の問題の解決策として、次のコード スニペットを実行してみてください。

例えば

    $finalarray=array();

    $Colors_Bright_All =    array("Silver","White","Gold","Royal_Blue","Dodger_Blue","Deep_Sky_Blue","Deep_Green","Forest_Green","Bright_Green","Violet"); 

   $Colors_Light_All = array("Light_Gray","Silver","White","Gold","Dodger_Blue","Deep_Sky_Blue","Light_Blue","Bright_Green","LightGreen","Light_Green");

 array_push($finalarray,'('.join(',',$Colors_Bright_All).')');
 array_push($finalarray,'('.join(',',$Colors_Light_All).')');

  $value=join(',',$finalarray);

 $sql = "INSERT INTO `product_features` (Colors_All) VALUES ".$value; // Build the initial query 
 $finSQL = rtrim($sql, ","); // Strip the last , so our mysql query doesn't goof up. 
 $stmt = $conn->prepare($finSQL);
 $stmt->execute();
于 2013-04-20T05:31:25.400 に答える
0

すでに他の回答で言われているように、ネストされた配列を作成することが唯一の正しい方法です

$colors['bright'] = array("Silver","White","Gold"...); 
$colors['light']  = array("Light_Gray","Silver","White"...);

foreach ($colors as $type => $array) {

     // put your code here

}

以外に挿入するためのデータがさらに必要な場合$type(非常に漠然とした質問からはわからないため)、このデータを含む配列を追加することもできます

于 2013-04-20T05:34:27.077 に答える
-1
<?php
function myInsert($myArray)
{
    $colour_value = "";
    $stmt = $mysqli->prepare("INSERT INTO `product_features` (Colors_All) VALUES (?)");

    if ($stmt) {
        $stmt->bind_param("s", $colour_value );


        foreach ($myArrayas AS $value) {
            $colour_value = $value;
            $stmt->execute();
        }

        $stmt->close();
    }
}


function myInsert($Colors_Bright_All);
function myInsert($Colors_Light_All);
?>

編集

<?php
$newArray = array();

foreach( $_GLOBALS as $val )
{
    if( substr($val, 0, 7) == "Colors_" )
        myInsert($val);
}

?>
于 2013-04-20T05:25:42.203 に答える