【发布时间】:2014-07-06 22:40:44
【问题描述】:
我有一个来自 feed 的数组,带有以下 print_r 输出:
Array
(
[0] => Array
(
[name] => Cell Phone Case
[options] => Array
(
[Colors] => Array
(
[0] => Clear
[1] => Red
[2] => Blue
)
)
Array
(
[1] => Array
(
[name] => Iphone
)
Array
(
[2] => Array
(
[name] => Tablet
[options] => Array
(
[Color] => Array
(
[0] => White
[1] => Black
[2] => Red
)
)
不幸的是,Feed 提供了两个值的颜色,对于某些产品,它是:
options['Colors']
还有一些其他的
options['Color'].
我将值插入数据库的代码如下:
$stmt = $conn->prepare("INSERT INTO product_colors(product_id, colors) VALUES(:pid, :colors)");
if (!is_array($value['options']['Colors'])) {
$value['options']['Colors'] = array($value['options']['Colors']);
}
if (!is_array($value['options']['Color'])) {
$value['options']['Color'] = array($value['options']['Color']);
}
//Colors or Color
$colorArr = array();
if(isset($value['options']['Colors'])) {
$colorArr = $value['options']['Colors'];
}
if(isset($value['options']['Color'])) {
$colorArr = array_merge($colorArr, $value['options']['Color']);
}
$PID = ($conn->lastInsertId());
foreach ($colorArr as $colors) {
$stmt->execute(array(':pid' => $PID, ':colors' => $colors));
}
除了每个产品颜色值的产品 1(在末尾)之外,除了在开头也插入了一个空值之外,数据正在被插入。
print_r($colorArr);给出以下数组输出:
Array
(
[0] => Clear
[1] => Red
[2] => Blue
[3] =>
)
产品 1 的 3 种颜色后的额外空值...
请注意,有些产品没有像数组 2 中的 iphone 这样的颜色值。
我该如何解决这个问题???我需要将产品颜色插入数据库以获得相应的产品 ID,即使选项同时是 Colors 或 Color。
请求帮助....
更新:
我已经自己纠正了这个问题。如果任何后续数组的字段为空,则默认的 php array_merge 函数不会合并值。该函数将其纠正如下:
function array_merge_corrected($array_a=array(),$array_b=array()){
$array_merge= array();
if(!empty($array_a)&& !empty($array_b)){
foreach($array_a as $field=>$value){
$array_merge[$field]= $value;
}
foreach($array_b as $field=>$value){
if(!empty($value)){
$array_merge[$field]= $value;
} elseif(!array_key_exists($field,$array_a)){
$array_merge[$field]= $value;
}
}
}
return $array_merge;
}
$colorArr = array_merge_corrected($colorArr, $value['options']['Color']);
【问题讨论】: