duanbaque4230 2017-08-02 13:02
浏览 44
已采纳

将数组中的类似值分组

Here is the array, which I have posted through Ajax and get into the ajax.php file. Now i want to add a new array, as shown below.

Array
(
    [0] => Array
        (
            [contact_id] => 5000
            [invoice] => 476
        )

    [1] => Array
        (
            [contact_id] => 5000
            [invoice] => 396
        )

    [2] => Array
        (
            [contact_id] => 1490
            [invoice] => 1083
        )

    [3] => Array
        (
            [contact_id] => 1490
            [invoice] => 498


  )
)

I also want to add this if contact id are same, then invoice will be added

Array
(
    [0] => Array
        (
            [contact_id] => 5000
            [invoice] => Array (
                    [0] =>476,
                    [1] =>396
            )
        )

    [2] => Array
        (
            [contact_id] => 1490
            [invoice] => Array (
                    [0] =>1083,
                    [1] =>498
            )
        )
)

I tried to do it, without success. Here is my code:

$invtemp =array();
 foreach($_POST['invoice_id'] as $value){
    if(!in_array($value['contact_id'], $invtemp, true)){
         $arr = array($value['contact_id'] => $value['invoice'] );
         array_push($invtemp, $arr);    
    }
}
  • 写回答

3条回答 默认 最新

  • drbe16008 2017-08-02 13:10
    关注

    I think you can achieve with simple foreach:

    foreach ($array as $value) {
        $arr[$value['contact_id']]['contact_id'] = $value['contact_id'];
        $arr[$value['contact_id']]['invoice'][] = $value['invoice'];
    }
    
    print_r($arr);
    

    This provides:

    Array
    (
        [5000] => Array
            (
                [contact_id] => 5000
                [invoice] => Array
                    (
                        [0] => 476
                        [1] => 396
                    )
    
            )
    
        [1490] => Array
            (
                [contact_id] => 1490
                [invoice] => Array
                    (
                        [0] => 1083
                        [1] => 498
                    )
    
            )
    
    )
    

    To reset the keys:

    print_r(array_values($arr));
    

    Not so important, but to make it cleaner, you can use extract:

    foreach ($array as $value) {
        extract($value);
        $arr[$contact_id]['contact_id'] = $contact_id;
        $arr[$contact_id]['invoice'][] = $invoice;
    }
    
    print_r($arr);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?