【问题标题】:How to group Array according to their same types keys如何根据相同类型的键对数组进行分组
【发布时间】:2014-11-03 12:58:03
【问题描述】:

我需要什么

  • 我需要对相同类型的数组进行分组。
  • array1 ['type']=aarray2 ['type']=a,则应将其分组到单个数组中。

数组结构

 Array
(
[1] => Array
(
    [type] => ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular
    [amount] => 850
    [comment] => On or Before June 28, 2014
)

[2] => Array
(
    [type] => ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Friend
    [amount] => 1000
    [comment] => On or Before June 28, 2014
)

[3] => Array
(
    [type] => ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Student
    [amount] => 500
    [comment] => On or Before June 28, 2014
)

[4] => Array
(
    [type] => ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular)
    [amount] => 990
    [comment] => June 29 thru July 20, 2014
)

PHP 代码

foreach($data as $k=>$v){
    $type[$v['type']][]=$k;
}

//loop types, creating result array
foreach($type as $k=>$v){
    $tmp=array(
    'type'=>$kk,
    'metadata'=>array()
);

//loop all the arrays of this type
foreach($v as $w){
    //store in TMP
    $t=array(
        'amount' => $data[$w]['amount'],
        'comment' => $data[$w]['comment']
    );
    //store 
    $tmp['metadata'][]=$t;
}

$result[]=$tmp;

}

输出类型

[ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular] => Array
(
    [0] => 1
    [1] => 7
)

[ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Friend] => Array
(
    [0] => 2
    [1] => 5
    [2] => 8
)

[ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Student] => Array
(
    [0] => 3
    [1] => 6
    [2] => 9
)

[ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular)] => Array
(
    [0] => 4
)

我遇到了问题

[ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular] => Array
(
    [0] => 1
    [1] => 7
)

[ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular)] => Array
(
    [0] => 4
)
  • 此数组具有相同类型但未分组。

  • 我希望 ECOOP 会议、研讨会和 UPMARC 暑期学校(7 月 28 日周一至周五 - 8 月 1 日)定期分组。

  • 如何解决这个问题,欢迎提出任何建议。

【问题讨论】:

  • 您可以检查数组键是否存在,如果不创建数组,则您将新项目推入具有键类型的数组

标签: php arrays


【解决方案1】:

很可能是因为在其他值上多余的)

ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular
ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular)
// extra `)` on the end

或者,您可以简单地通过修剪来修复它:

foreach($data as $k => $v){
    $type_val = rtrim($v['type'], ')');
    $type[$type_val][] = $k;
}

您可以像这样推送它们并将它们分组:

$new_data = array();
foreach($data as $k => $v){
    $type_val = rtrim($v['type'], ')');
    // simple initialize
    if(!isset($new_data[$type_val])) {
        $new_data[$type_val] = array(
            'amount' => 0,
            'comment' => array(),
        );
    }

    // push values
    $new_data[$type_val]['amount'] += $v['amount'];
    $new_data[$type_val]['comment'][] = $v['comment'] . "\n";
}

echo '<pre>';
print_r($new_data);

上面sn-p的Simple Output

【讨论】:

  • error PHP Warning: Illegal string offset 'ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular'
  • 更新错误 PHP 致命错误:不能使用字符串偏移作为数组
  • @user3785613 我做了一些修改,请再试一次
【解决方案2】:

两种类型不一样

ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular
ECOOP Conference, Workshops and UPMARC Summer School (Mon-Fri July 28 - August 1) Regular) // extra `)` on the end

分组代码

$newArr = array();
foreach($array as $key=>$value) {
    $newArr[$value['type']][] = $value; 
}

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多