【问题标题】:grouping array elements according to other array elements根据其他数组元素对数组元素进行分组
【发布时间】:2013-09-29 19:50:16
【问题描述】:

从这样的开始:

大批 ( 0 => 大批 ( 'co' => '1', 'lo' => 'aaa', ), 1 => 大批 ( 'co' => '1', 'lo' => 'bbb', ), 2 => 大批 ( 'co' => '1', 'lo' => 'ccc', ), 3 => 大批 ( 'co' => '1', 'lo' => 'aaa', ), 4 => 大批 ( 'co' => '1', 'lo' => 'bbb', ) )

然后将索引为“lo”的数组元素分组,计算伴随它们的“co”的值,最终得到类似于:

大批 ( aaa => 2, bbb => 2, cc => 1 )

【问题讨论】:

  • 那么,您希望我们为您完成工作吗?请告诉我们what have you tried so far。
  • foreach 循环将是一个好的开始,您尝试过什么?
  • 他有足够的重复次数来帮他一个忙;-)

标签: php arrays count grouping


【解决方案1】:

我同意其他人关于显示您迄今为止尝试过的代码的观点。话虽如此,这应该可行:

$array = array (
  array (
    'co' => '1',
    'lo' => 'aaa',
  ),
  array (
    'co' => '1',
    'lo' => 'bbb',
  ),
  array (
    'co' => '1',
    'lo' => 'ccc',
  ),
  array (
    'co' => '1',
    'lo' => 'aaa',
  ),
  array (
    'co' => '1',
    'lo' => 'bbb',
  )
);

$new_array = array();

foreach($array as $a){
  if(!array_key_exists($a['lo'], $new_array)){
    $new_array[$a['lo']] = intval($a['co']);
  }else{
    $new_array[$a['lo']] = $new_array[$a['lo']] + intval($a['co']);
  }
}

print_r($new_array);

我们在数组中循环,如果不存在则创建一个新的数组键,如果已经存在,则将'co' 中指定的数字添加到数组键值中。您可能需要进行一些额外的检查,以确保 'co' 和 'lo' 在尝试解析/添加到新数组之前作为数组键存在于原始数组中。

附带说明,由于数组是自动索引的,因此无需将原始数组的键指定为数字。请注意,我在声明数组时删除了这些数字。

【讨论】:

  • 同样适用于第一条语句 ;-) $new_array[$a['lo']] = intval($a['co']);
【解决方案2】:

像这样?

$dataArray = array (
    0 =>
    array (
        'co' => '1',
        'lo' => 'aaa',
    ),
    1 =>
    array (
        'co' => '1',
        'lo' => 'bbb',
    ),
    2 =>
    array (
        'co' => '1',
        'lo' => 'ccc',
    ),
    3 =>
    array (
        'co' => '1',
        'lo' => 'aaa',
    ),
    4 =>
    array (
        'co' => '1',
        'lo' => 'bbb',
    )
);

$finalResults = array();

foreach($dataArray as $data){
    if(isset($finalResults[$data['lo']])){
        $finalResults[$data['lo']]++;
    }else{
        $finalResults[$data['lo']] = 1;
    }
}


print_r($finalResults);

【讨论】:

  • co 是我认为你应该总结的计数
【解决方案3】:

你在这里;-)

$in=array (
  0 => 
  array (
    'co' => '1',
    'lo' => 'aaa',
  ),
  1 => 
  array (
    'co' => '1',
    'lo' => 'bbb',
  ),
  2 => 
  array (
    'co' => '1',
    'lo' => 'ccc',
  ),
  3 => 
  array (
    'co' => '1',
    'lo' => 'aaa',
  ),
  4 => 
  array (
    'co' => '1',
    'lo' => 'bbb',
  )
);

$out= array();

for($i=0;$i<count($in);$i++)
{
    $out[$in[$i]['lo']]=0;
}

for($i=0;$i<count($in);$i++)
{
    $out[$in[$i]['lo']]+=$in[$i]['co'];
}

print_r($out);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多