在阵列中重复对象时分割数组

时间:2015-07-10 15:59:40

标签: php mysql arrays

我正在解析XML文件并创建两个arrays:一个XML标记($tags),另一个作为标记的值($values )。在解析时,它会添加标记和值,当它完成时,我implode数组并将它们放入MySQL语句中:

$sql = "INSERT INTO everything ($tags) VALUE ($values)";

在我重复标记之前,这样可以正常工作,然后SQL语句不起作用....

有没有办法在$tags数组中找到第一个重复的单词并将其拆分为该单词(保留其后面的标记),并将$values数组拆分为相同的索引$tags被拆分,以便信息保持相同的顺序?

所以最终转换这样的东西:

INSERT INTO everything (AmazonOrderID,MerchantOrderID,ShipmentID,MerchantFulfillmentID,PostedDate,AmazonOrderItemCode,SKU,Quantity,Principal,Commission,AmazonOrderItemCode,SKU,Quantity,Principal,Commission,AmazonOrderItemCode,SKU,Quantity,Principal,Commission,FBA) VALUE ('1','1','D','A','2015','64','OX','1','18','-2','64','WA','1','23','-2','29','WAG','1','49','77','97');

类似于:

INSERT INTO everything (AmazonOrderID,MerchantOrderID,ShipmentID,MerchantFulfillmentID,PostedDate,AmazonOrderItemCode,SKU,Quantity,Principal,Commission) VALUES ('1','1','D','A','2015','64','OX','1','18','-2');

INSERT INTO everything (AmazonOrderItemCode,SKU,Quantity,Principal,Commission) VALUES ('64','WA','1','23','-2');

INSERT INTO everything (AmazonOrderItemCode,SKU,Quantity,Principal,Commission,FBA) VALUES ('29','WAG','1','49','77','97');

提前致谢!...

1 个答案:

答案 0 :(得分:1)

我只是基于你的“类似”......:)

$fields = ['AmazonOrderID', 'MerchantOrderID', 'ShipmentID', 'MerchantFulfillmentID', 'PostedDate', 'AmazonOrderItemCode', 'SKU', 'Quantity', 'Principal', 'Commission', 'AmazonOrderItemCode', 'SKU', 'Quantity', 'Principal', 'Commission', 'AmazonOrderItemCode', 'SKU', 'Quantity', 'Principal', 'Commission', 'FBA'];

$values = ['1','1','D','A','2015','64','OX','1','18','-2','64','WA','1','23','-2','29','WAG','1','49','77','97'];

// i just added this to avoid error produced by: `Undefined offset` error warning
error_reporting(0);

$fields_dup = array();

$values_dup = array();

for ($i = 0, $j = 0; $i < count($fields); $i++)
{
    if (in_array($fields[$i], $fields_dup[$j]))
        $j++;

    $fields_dup[$j][] = $fields[$i];
    $values_dup[$j][] = $values[$i];

    // or maybe you want to add ` and ' make your statement look like:
    // INSERT INTO table (`field1`, `field2`) VALUES ('value1', 'value2')
    // 
    // $fields_dup[$j][] = "`".$fields[$i]."`";
    // $values_dup[$j][] = "'".$values[$i]."'";

}

error_reporting(E_ALL);

// just to show what is produced
var_dump($fields_dup);
var_dump($values_dup);

// while you can also construct your statement in a loop like
for ($i = 0; $i < count($fields_dup); $i++)
{
    $sql_fields = implode(',', $fields_dup[$i]);
    $sql_values = implode(',', $values_dup[$i]);

    echo "INSERT INTO everything ($sql_fields) VALUES ($sql_values) <br>";  
}

输出将是:

//var_dump($fields_dup);
array (size=3)
  0 => 
    array (size=10)
      0 => string 'AmazonOrderID' (length=13)
      1 => string 'MerchantOrderID' (length=15)
      2 => string 'ShipmentID' (length=10)
      3 => string 'MerchantFulfillmentID' (length=21)
      4 => string 'PostedDate' (length=10)
      5 => string 'AmazonOrderItemCode' (length=19)
      6 => string 'SKU' (length=3)
      7 => string 'Quantity' (length=8)
      8 => string 'Principal' (length=9)
      9 => string 'Commission' (length=10)
  1 => 
    array (size=5)
      0 => string 'AmazonOrderItemCode' (length=19)
      1 => string 'SKU' (length=3)
      2 => string 'Quantity' (length=8)
      3 => string 'Principal' (length=9)
      4 => string 'Commission' (length=10)
  2 => 
    array (size=6)
      0 => string 'AmazonOrderItemCode' (length=19)
      1 => string 'SKU' (length=3)
      2 => string 'Quantity' (length=8)
      3 => string 'Principal' (length=9)
      4 => string 'Commission' (length=10)
      5 => string 'FBA' (length=3)


// var_dump($values_dup);
array (size=3)
  0 => 
    array (size=10)
      0 => string '1' (length=1)
      1 => string '1' (length=1)
      2 => string 'D' (length=1)
      3 => string 'A' (length=1)
      4 => string '2015' (length=4)
      5 => string '64' (length=2)
      6 => string 'OX' (length=2)
      7 => string '1' (length=1)
      8 => string '18' (length=2)
      9 => string '-2' (length=2)
  1 => 
    array (size=5)
      0 => string '64' (length=2)
      1 => string 'WA' (length=2)
      2 => string '1' (length=1)
      3 => string '23' (length=2)
      4 => string '-2' (length=2)
  2 => 
    array (size=6)
      0 => string '29' (length=2)
      1 => string 'WAG' (length=3)
      2 => string '1' (length=1)
      3 => string '49' (length=2)
      4 => string '77' (length=2)
      5 => string '97' (length=2)

// for the last for-statement

INSERT INTO everything (AmazonOrderID,MerchantOrderID,ShipmentID,MerchantFulfillmentID,PostedDate,AmazonOrderItemCode,SKU,Quantity,Principal,Commission) VALUES (1,1,D,A,2015,64,OX,1,18,-2) 

INSERT INTO everything (AmazonOrderItemCode,SKU,Quantity,Principal,Commission) VALUES (64,WA,1,23,-2) 

INSERT INTO everything (AmazonOrderItemCode,SKU,Quantity,Principal,Commission,FBA) VALUES (29,WAG,1,49,77,97) 

这是你想要做的吗?

希望这很有帮助,干杯! ;)