2014-09-02 129 views
1

这是我的当前阵列的结果:我如何从数组中提取元素并在php中创建一个新的元素?

array(10) { 
    [0]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "10" 
    ["name"]=> 
    string(17) "ACID TARTRIC 1KG " 
    ["price"]=> 
    float(44) 
    ["cantitate"]=> 
    string(6) "27.000" 
    ["id_gest"]=> 
    string(1) "1" 
    } 
    [1]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "11" 
    ["name"]=> 
    string(12) "FIR ERT 250 " 
    ["price"]=> 
    float(8) 
    ["cantitate"]=> 
    string(5) "7.000" 
    ["id_gest"]=> 
    string(1) "1" 
    } 
    [2]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "12" 
    ["name"]=> 
    string(40) "ZDROBITOR DESCIORCHINATOR ENO 15 SMALTO " 
    ["price"]=> 
    float(1830) 
    ["cantitate"]=> 
    string(5) "2.000" 
    ["id_gest"]=> 
    string(1) "1" 
    } 
    [3]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "12" 
    ["name"]=> 
    string(40) "ZDROBITOR DESCIORCHINATOR ENO 15 SMALTO " 
    ["price"]=> 
    float(1830) 
    ["cantitate"]=> 
    string(5) "5.000" 
    ["id_gest"]=> 
    string(2) "11" 
    } 
    [4]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "13" 
    ["name"]=> 
    string(42) "ZDROBITOR DESCIORCHINATOR ENO 15 SEMIINOX " 
    ["price"]=> 
    float(2440) 
    ["cantitate"]=> 
    string(5) "1.000" 
    ["id_gest"]=> 
    string(2) "11" 
    } 
    [5]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "17" 
    ["name"]=> 
    string(31) "DESCIORCHINATOR ARNO 35 SMALTO " 
    ["price"]=> 
    float(4150) 
    ["cantitate"]=> 
    string(5) "2.000" 
    ["id_gest"]=> 
    string(2) "11" 
    } 
    [6]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "18" 
    ["name"]=> 
    string(20) "FERMACTIVE SC 500GR " 
    ["price"]=> 
    float(49) 
    ["cantitate"]=> 
    string(6) "23.000" 
    ["id_gest"]=> 
    string(1) "1" 
    } 
    [7]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "18" 
    ["name"]=> 
    string(20) "FERMACTIVE SC 500GR " 
    ["price"]=> 
    float(49) 
    ["cantitate"]=> 
    string(5) "4.000" 
    ["id_gest"]=> 
    string(2) "11" 
    } 
    [8]=> 
    array(5) { 
    ["sku"]=> 
    string(2) "19" 
    ["name"]=> 
    string(18) "SULFOMAT 80PU 1KG " 
    ["price"]=> 
    float(7) 
    ["cantitate"]=> 
    string(6) "72.000" 
    ["id_gest"]=> 
    string(1) "1" 
    } 
    [9]=> 
    array(5) { 
    ["sku"]=> 
    string(3) "100" 
    ["name"]=> 
    string(19) "FERMACTIVE SB 500g " 
    ["price"]=> 
    float(59) 
    ["cantitate"]=> 
    string(6) "50.000" 
    ["id_gest"]=> 
    string(1) "1" 
    } 
} 

正如你可以看到有重复元素,如DESCIORCHINATOR ARNO 35 SMALTO,但有cantitate(这意味着:量)不是这样,也id_gest。所以,我想创建一个没有重复数组的数组,但我也想总结重复数的数量,并且还要到id_gest。 这是我的尝试:

for ($i=0; $i < count($result); $i++) { 
       for ($j = $i+1; $j < count($result)+1; $j++) { 
        if ($result[$i]['sku'] == $result[$j]['sku']){ 
         $qty = $result[$i]['cantitate'] + $result[$j]['cantitate']; 
         //echo $qty."<br>"; 
         $id_gest = $result[$i]['id_gest']."%%". $result[$j]['id_gest']; 
         $list[$i] = $result[$i]['sku']."%%".$result[$i]['name']."%%".$result[$i]['price']."%%".$qty."%%".$id_gest; 
         //unset($result[$i]); 
        }else{ 
         $qty = $result[$i]['cantitate']; 
         $id_gest = $result[$i]['id_gest']."%%"; 
         $list[$i+1] = $result[$i]['sku']."%%".$result[$i]['name']."%%".$result[$i]['price']."%%".$qty."%%".$id_gest; 
        } 
       } 
      } 

$ list是新的数组。我究竟做错了什么?

+0

我是否让自己清楚? – Attila 2014-09-02 07:27:25

+0

这是一个很难回答的问题,还是我不能很好地解释我真正想要的? – Attila 2014-09-02 07:34:23

+0

你想合并那些重复的数量和id_gest? – Ghost 2014-09-02 07:38:07

回答

0

只是一个简单的foreach应该就足够了。使用该项目的SKU并将其作为键在阵列内部推入。例如:

$list = array(); 
foreach($result as $item) { 
    $sku = $item['sku']; 

    if(!isset($list[$sku])) { 
     // if it does not yet exist, push the whole array 
     $list[$sku] = $item; 
    } else { 
     // if it exists already, just add the quantity 
     $list[$sku]['cantitate'] += $item['cantitate']; 
    } 
} 

// simple reindex 
$list = array_values($list); 
+0

thx快速回答! – Attila 2014-09-02 07:45:20

0

结构是否真的很重要?否则,你可以试试这个:

$list = array(); 
for ($i=0; $i < count($result); $i++) { 
    $sku = $result[$i]['sku']; 
    $qty = @$list[$sku]['qty'] + $result[$i]['cantitate']; 
    $id_gest = @$list[$sku]['id_gest'] . '%%' . $result[$i]['id_gest']; 

    $list[$sku]['qty'] = $qty; 
    $list[$sku]['id_gest'] = $id_gest; 
    $list[$sku]['whatever'] = $sku."%%".$result[$i]['name']."%%".$result[$i]['price']."%%".$qty."%%".$id_gest; 
} 
0

很难理解你正在做的循环这就是为什么我写了另一个,这应该工作。如果'sku'键是某种类型的ID比

$noDuplicateArray = array(); 
foreach ($result as $item) { 
    if (isset($noDuplicateArray[$item['sku']])) { 
     $noDuplicateArray[$item['sku']]['cantitate'] += $item['cantitate']; 
    } else { 
     $noDuplicateArray[$item['sku']] = $item; 
    } 
} 
相关问题