2016-03-21 17 views
0

Aşağıda gösterildiği gibi bazı satırların aynı ada sahip olacağı bir dizi var. Neyi başarmak istediğimi yapmaya çalışmak için hiçbir yere gitmiyorum.php temelli off değerlerini girin php

Bir foreach döngüsüyle, her birinden nasıl geçeceğimi aynı adın değerlerini ekleyip yeni bir diziye ekledim?

Thanks :)

Array 
(
    [0] => Array 
     (
      [0] => Name1 
      [1] => Value 
     ) 
    [1] => Array 
     (
      [0] => Name2 
      [1] => Value 
     ) 

    [2] => Array 
     (
      [0] => Name1 
      [1] => Value 
     ) 

    [3] => Array 
     (
      [0] => Name3 
      [1] => Value 
     ) 

    [4] => Array 
     (
      [0] => Name2 
      [1] => Value 
     ) 

Bu yalnızca bir pasajı ve csv o değişikliklerden haftalık Teşekkür

cevap

0

Henüz en etkili yol bu değil, ancak olmasını istediğiniz şekilde çalışıyor.

<?php 

$testArr = array(
      array('Name1', 1), 
      array('Name2',2), 
      array('Name1',3) 
); 
$newArr = array(); 
$tmp = array(); 
foreach($testArr as $i=>$row) 
{ 
    if(in_array($row[0], $tmp)) 
    { 
     $key = array_search($row[0], $tmp); 
     $newArr[ $key ][1] += $row[1]; 
    } 
    else 
    { 
     array_push($newArr, array($row[0], $row[1])); 
     array_push($tmp, $row[0]); 
    } 
} 

print_r($newArr); 

?> 

ÇIKIŞ

Array 
(
    [0] => Array 
     (
      [0] => Name1 
      [1] => 4 
     ) 

    [1] => Array 
     (
      [0] => Name2 
      [1] => 2 
     ) 
) 

Test çalışma, phpFiddle

+0

Bu parlak çalışır buraya atın! Toplamı bölmek için eklenen süreyi bölmek için kodda zaten var mı? Örneğin, Name1 toplamı 10 ise ancak Name1'in beş katı varsa, 2 – Darbs

+0

Evet. Bunun için yeni bir foreach çalıştırıyorum, bu olayların toplamı ve sayısını böler. Kontrol edin [burada] (http://ideone.com/LrggzJ). – rmondesilva

0

böyle bir şey istiyor musunuz geldiğinde uzunluğuna değişecek?

$newData = []; 
foreach ($array as $item) { 
    $newData[$item[0]][] = $item[1]; 
} 
var_dump($newData); 
0

Bu yaklaşıma göre sonuca ulaşabilirsiniz.

$data_array = Array{}; 

$result_array = NULL; 

foreach ($data_array as $value) { 
    $result_array[$value[0]] += $value[1]; 
}