按键分组数组 [英] Group array by key

查看:100
本文介绍了按键分组数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数组:

array(
 "A1" => 4,
 "A2" =>5,
 "B1" => 2,
 "B2" =>7,
 "C1" => 4,
 "C2" =>5,
 "D1" => 4,
 "D2" =>5,
  .....
)

现在我只想添加新数组:

Now I just want to new array:

$arr1 = array("A"=>array("A1"=>4, "A2"=>5), "B" => array("B1" => 2, "B2" => "7"), ...)

$arr2 = array(
 0=>array("A1"=>"4","B1"=>2,"C1"=>4,"D1"=>4),
 1=>array("A2"=>"4","B2"=>2,"C2"=>4,"D2"=>4)
)

请帮助我,如何对阵列进行分组?

Help me, how can I group the array?

推荐答案

$arr = array(
 "A1" => 4,
 "A2" =>5,
 "B1" => 2,
 "B2" =>7,
 "C1" => 4,
 "C2" =>5,
 "D1" => 4,
 "D2" =>5,
);

ksort($arr, SORT_NATURAL);
$arr1 = $arr2 = array();
foreach ($arr as $key => $value) {
    $letter = substr($key, 0, 1);
    $index = (int)substr($key, 1) - 1;

    !isset($arr1[$letter]) && $arr1[$letter] = array();
    $arr1[$letter][$key] = $value;

    !isset($arr2[$index]) && $arr2[$index] = array();
    $arr2[$index][$key] = $value;
}

ksort($arr1, SORT_NATURAL);
ksort($arr2, SORT_NATURAL);

var_dump($arr1, $arr2);

输出:

array(4) {
  ["A"]=>
  array(2) {
    ["A1"]=>
    int(4)
    ["A2"]=>
    int(5)
  }
  ["B"]=>
  array(2) {
    ["B1"]=>
    int(2)
    ["B2"]=>
    int(7)
  }
  ["C"]=>
  array(2) {
    ["C1"]=>
    int(4)
    ["C2"]=>
    int(5)
  }
  ["D"]=>
  array(2) {
    ["D1"]=>
    int(4)
    ["D2"]=>
    int(5)
  }
}
array(2) {
  [0]=>
  array(4) {
    ["A1"]=>
    int(4)
    ["B1"]=>
    int(2)
    ["C1"]=>
    int(4)
    ["D1"]=>
    int(4)
  }
  [1]=>
  array(4) {
    ["A2"]=>
    int(5)
    ["B2"]=>
    int(7)
    ["C2"]=>
    int(5)
    ["D2"]=>
    int(5)
  }
}

这篇关于按键分组数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆