首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于id的数组数据合并

基于id的数组数据合并
EN

Stack Overflow用户
提问于 2020-04-25 08:02:57
回答 1查看 51关注 0票数 0

原始数据

代码语言:javascript
复制
Array
  (
    [0] => Array
      (
        [bet_id] => 7
        [agent_id] => 2
        [bet_type] => 1
        [amount] => 0
        [name] => ethan
       )

     [1] => Array
          (
            [bet_id] => 7
            [agent_id] => 2
            [bet_type] => 3
            [amount] => 0
            [name] => ethan
           )

      [2] => Array
             (
               [bet_id] => 7
               [agent_id] => 4
               [bet_type] => 1
               [amount] => 2
               [name] => alex
              )

       [3] => Array
               (
                 [bet_id] => 7
                 [agent_id] => 4
                 [bet_type] => 4
                 [amount] => 100
                 [name] => alex
               ) 
    )

我被困在逻辑思维中去分离上面的数据。上面的数组将循环所有用户的数据,这里有两个用户。如何将其合并为基于agentId的两个数组。它将如下所示。

代码语言:javascript
复制
Array
     ( 
      [0] => Array 
         (
            [agent_id] => 2
            [name] => ethan
            [1] => 2    //bettype & amount
            [3] => 0    //bettype & amount
            [bet_id] => 7                       
          )                                           
     [1] => Array 
          (
             [agent_id] => 4
             [name] => alex
             [1] => 0     //bettype & amount
             [4] => 100    //bettype & amount
             [bet_id] => 7                       
          )
     )

注释:唯一不同的数据,即agent_id、bet_type和amount。其他数据将是相同的.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 10:35:43

bet_type作为键,将amount作为值,会使您的数据结构看起来很糟糕,但让我们将其设置为

代码语言:javascript
复制
$result = [];
foreach($data as $user) {
    $found = -1;
    for($i = 0; $i<count($result); $i++) {
        if($result[$i]["agent_id"] == $user["agent_id"]) {
            $found = $i;
            break;
        }
    }
    // if not found, create new
    if($found == -1) {
        $result[] = [
            "agent_id" => $user["agent_id"],
            "name" => $user["name"],
            "bet_id" => $user["bet_id"],
            $user["bet_type"] => $user["amount"]
        ];
    } else {
        $result[$i][$user["bet_type"]] = $user["amount"];
    }
}

$data是您的数组,输出如下所示

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [agent_id] => 2
            [name] => ethan
            [bet_id] => 7
            [1] => 0
            [3] => 0
        )

    [1] => Array
        (
            [agent_id] => 4
            [name] => alex
            [bet_id] => 7
            [1] => 2
            [4] => 100
        )

)

我建议你改变bet_type的位置,把它们放在像这样的子数组上

代码语言:javascript
复制
$result = [];
foreach($data as $user) {
    $found = -1;
    for($i = 0; $i<count($result); $i++) {
        if($result[$i]["agent_id"] == $user["agent_id"]) {
            $found = $i;
            break;
        }
    }
    // if not found, create new
    if($found == -1) {
        $result[] = [
            "agent_id" => $user["agent_id"],
            "name" => $user["name"],
            "bet_id" => $user["bet_id"],
            "details" => [
                $user["bet_type"] => $user["amount"]
            ]
        ];
    } else {
        $result[$i]["details"][$user["bet_type"]] = $user["amount"];
    }
}

这将使您的数据更容易查看。

输出将如下所示

代码语言:javascript
复制
(
    [0] => Array
        (
            [agent_id] => 2
            [name] => ethan
            [bet_id] => 7
            [details] => Array
                (
                    [1] => 0
                    [3] => 0
                )

        )

    [1] => Array
        (
            [agent_id] => 4
            [name] => alex
            [bet_id] => 7
            [details] => Array
                (
                    [1] => 2
                    [4] => 100
                )

        )

)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61422666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档