2017-06-22 87 views
-1

我收到奇怪的数组行为。我得到一个重复键的数组。我检查了这是由于键的数据类型。我怎样才能让它独一无二。这是数组:删除数组中的重复键

Array 
(
    [1811258] => stdClass Object 
     (
      [status] => true 
      [count] => 1 
      [price] => 2501 
      [attributes] => 
      [groupid] => 2400 
      [subgroupid] => bux_364905 
      [desc] => GE Refrigerator - Side by Side GC5SHEXNQ.. 
      [id] => 1811258 
     ) 

    [1812193] => stdClass Object 
     (
      [status] => true 
      [count] => 1 
      [price] => 293 
      [attributes] => 
      [groupid] => 2410 
      [subgroupid] => 0 
      [desc] => STAINLESS STEEL DOUBLE BOWL - 20 GAUGE 
      [id] => 1812193 
     ) 

    [1811258] => stdClass Object 
     (
      [status] => 1 
      [count] => 1 
      [price] => 2501 
      [attributes] => 
      [groupid] => 2400 
      [subgroupid] => bux_364905 
      [desc] => GE Refrigerator - Side by Side GC5SHEXNQ.. 
      [id] => 1811258 
     ) 

    [1852936] => stdClass Object 
     (
      [status] => 1 
      [count] => 1 
      [price] => 525 
      [attributes] => 
      [groupid] => 2489 
      [subgroupid] => 0 
      [desc] => 
      [id] => 1852936 
     ) 

    [1812193] => stdClass Object 
     (
      [status] => 1 
      [count] => 1 
      [price] => 293 
      [attributes] => 
      [groupid] => 2410 
      [subgroupid] => 0 
      [desc] => STAINLESS STEEL DOUBLE BOWL - 20 GAUGE 
      [id] => 1812193 
     ) 

) 

我试图array_key_exists()功能检查:

$saved=(array)json_decode($reviewdata->options); 
foreach($optioncodes as $key=>$optioncode){ 
     $option=$wpdb->get_row("SELECT * from {$prefix}builder_phaseplanoption where OptionCode='{$optioncode}' and SubdivisioNID='{$subdivision}'"); 
     if($option){ 
      if(array_key_exists($option->ID,$saved)) 
       $saved[$option->ID]=(object)array('status'=>true,'count'=>1,'price'=>$option->UnitPrice,'attributes'=>'','groupid'=>$option->OptionGroupID,'subgroupid'=>$option->Sub_OptionGroupID,'desc'=>$option->OptionLongDesc,'id'=>$option->ID); 
     } 
    } 

但没有effect.I也试图改变数据type.Like这

$optid=(string)$option->ID; // now this shoud string but no effect 
        $saved[$optid]=(object)array('status'=>true,'count'=>1,'price'=>$option->UnitPrice,'attributes'=>'','groupid'=>$option->OptionGroupID,'subgroupid'=>$option->Sub_OptionGroupID,'desc'=>$option->OptionLongDesc,'id'=>$option->ID); 

我知道这是由于保存数组中的键是字符串而新键是数字的问题。我怎样才能将它们转换为相同的类型。

在此先感谢。

+0

它会删除keys.No? – MKD

+0

对不起,在最后的评论是'array_unique()'尝试它。 –

+0

[如何删除数组中的重复键]可能的重复(https://stackoverflow.com/questions/7550826/how-to-remove-duplicate-keys-in-array) –

回答

0

我已经这样做了,但我不确定它是否是正确的方法。如果有更好的方法,请给出你的建议。 我改变了数据类型并创建了一个新的数组,并删除了重复值。

$newsaved=array(); 
foreach($saved as $key=>$value){ 
    $stroptid=(string)$key; 
    $newsaved[$stroptid]=$value; 
} 

现在,这是输出

Array 
(
    [1811258] => stdClass Object 
     (
      [status] => 1 
      [count] => 1 
      [price] => 2501 
      [attributes] => 
      [groupid] => 2400 
      [subgroupid] => bux_364905 
      [desc] => GE Refrigerator - Side by Side GC5SHEXNQ.. 
      [id] => 1811258 
     ) 

    [1812193] => stdClass Object 
     (
      [status] => 1 
      [count] => 1 
      [price] => 293 
      [attributes] => 
      [groupid] => 2410 
      [subgroupid] => 0 
      [desc] => STAINLESS STEEL DOUBLE BOWL - 20 GAUGE 
      [id] => 1812193 
     ) 

    [1852936] => stdClass Object 
     (
      [status] => 1 
      [count] => 1 
      [price] => 525 
      [attributes] => 
      [groupid] => 2489 
      [subgroupid] => 0 
      [desc] => 
      [id] => 1852936 
     ) 

) 
+0

您在问题评论中发布的JSON包含不可见字符,并且该字符无效。我想知道你是如何设法解码它的。 'json_decode()'拒绝为我解码:https://3v4l.org/cg5WC – axiac