按键值组数组

时间:2011-09-14 01:20:48

标签: php multidimensional-array

我已经四处寻找并且我在我的智慧结束,所以我会让这很容易。这就是我在print_r中所拥有的:

Array
(
    [0] => Array
        (
            [name] => client interaction
            [y] => 2.7
        )

    [1] => Array
        (
            [name] => client interaction
            [y] => 0.1
        )

    [2] => Array
        (
            [name] => project planning
            [y] => 0.1
        )

    [3] => Array
        (
            [name] => client interaction
            [y] => 5.9
        )

)

这就是我想要的:

Array
(
    [0] => Array
        (
            [name] => client interaction
            [y] => 8.7
        )

    [1] => Array
        (
            [name] => project planning
            [y] => 0.1
        )

)

3 个答案:

答案 0 :(得分:4)

您所需的数组是否必须使用数字空格?如果我这样做,我会这样做(虽然与你想要的阵列不一样)

$newArray = array();
foreach($array as $item)
{
  if(!isset($newArray[$item["name"]]))
    $newArray[$item["name"]] = 0;

  $newArray[$item["name"]] += $item["y"];
}

这将为您提供此结构的数组:

Array
(
  [client interaction] => 8.7
  [project planning] => 0.1
)

要获得密钥,您只需使用foreach循环的第二种形式

foreach($newArray as $name => $y)

$name将包含原始数组中的name$y y

答案 1 :(得分:2)

$hash = array();
foreach ($sourceArray as $key=>$value) {
   $y = 0;
   if (isset($hash{$value{'name'}})) {
      $y = $hash{$value{'name'}};
   }

   $hash{$value{'name'}} = $y + $value{'y'};
}

$result = array();
foreach ($hash as $key => $value) {
  $result[] = array( 'name' => $key, 'value' => $value );
}
print_r($result);

最后一个循环只是将$hash变为您指定的确切格式。


说明:

$hash

是用于计算每个唯一名称的总和的临时结构。

foreach ($sourceArray as $key=>$value) {

这将通过您的原始数组($ sourceArray)并拉出每个元素。

   $y = 0;

初始化变量以存储属于该名称的当前总和。

   if (isset($hash{$value{'name'}})) {

检查某个值是否已存储在$hash中以获取给定名称。

      $y = $hash{$value{'name'}};
   }

将$ y设置为先前为给定名称计算的总和(如果有)。

   $hash{$value{'name'}} = $y + $value{'y'};
}

将给定名称的总和存储到我们的临时结构$hash

 $result = array();
    foreach ($hash as $key => $value) {
      $result[] = array( 'name' => $key, 'value' => $value );
    }

将$ hash转换为您想要的格式。

$result[] = ...中的empy []将表达式的右侧添加到$result数组的末尾。

答案 2 :(得分:0)

$mixed = array(); // Should contain your array shown above
$groups = array();
$newArray = array(); // Will contain your new array
$counter = 0;

foreach( $mixed as $mix )
{
    if ( isset($groups[$mix['name']]) )
    {
        $newArray[$groups[$mix['name']]]['y'] += $mix['y'];
    }
    else
    {
        $groups[$mix['name']] = $counter;
        $newArray[] = $mix;
        $counter++;
    }
}

http://codepad.org/EjdHxgvt