【问题标题】:Combine array with same element value and keep them all together将具有相同元素值的数组组合在一起并将它们保持在一起
【发布时间】:2013-04-25 15:42:03
【问题描述】:

我有这个数组:

[0] => Array
    (
        [userid] => 208
        [username] => sara
        [email] => sara@sara.com
    )

[1] => Array
    (
        [userid] => 4
        [username] => jack
        [email] => jack@jack.com
    )

[2] => Array
    (
        [userid] => 303
        [username] => michael
        [email] => michael@michael.com
    )

[3] => Array
    (
        [userid] => 208
        [username] => joe
        [email] => joe@joe.com
    )

[4] => Array
    (
        [userid] => 208
        [username] => david
        [email] => david@david.com
    )

我想要这个结果:

[0] => Array
(
    [userid] => 208
    [username1] => sara
    [username2] => joe 
    [username3] => david
    [email1] => sara@sara.com
    [email2] => joe@joe.com
    [email3] => david@david.com
)

[1] => Array
(
    [userid] => 4
    [username1] => jack
    [email1] => jack@jack.com
)

[2] => Array
(
    [userid] => 303
    [username1] => michael
    [email1] => michael@michael.com
)

我正在尝试将 array_combine、array_merge 甚至 array_unique 与几个 foreach 加 $n++;循环没有成功。更准确地说,我成功了,但改变了数组的整个结构。

【问题讨论】:

    标签: php arrays merge


    【解决方案1】:

    你可以这样做:

    /* $myArray is the array you are trying to change */
    $result = array(); //Your minimized array
    foreach($myArray as $value){
        $userid = $value['userid'];
        if(isset($result[$userid]))
            $index = ((count($result[$userid]) - 1) / 2) + 1;
        else
            $index = 1;
    
        $result[$userid]['userid'] = $userid;
        $result[$userid]['username' . $index] = $value['username'];
        $result[$userid]['email' . $index] = $value['email'];        
    }
    $result = array_values($result);
    

    【讨论】:

    • 最好的实现,虽然 $result[$userid] = $userid;应该是 $result[$userid]["userid"] = $userid;和 $index = (count($result[$userid]) - 1 / 2) + 1;应该是 $index = ((count($result[$userid]) - 1) / 2) + 1;和 $result[$userid]['email1' 。 $index] = $value['email'];应该是 $result[$userid]['email' 。 $index] = $value['email'];
    • 我终于看到了一些逻辑。不需要数组合并、组合和唯一。只是一个 foreach 和一个 if。谢谢奥马尔和帕特里克。我吸取了教训。
    【解决方案2】:

    我必须循环遍历数组来构建所需的结构:

    $result = array();
    foreach($data as $item) {
       $result[$item['userid']]['userid'] = $item['userid'];
       $i = 1;
       while (true) {
           if (!isset($result[$item['userid']]['username' . $i])) {
               $result[$item['userid']]['username' . $i] = $item['username'];
               $result[$item['userid']]['email' . $i] = $item['email'];
               break;
           }
           $i++;
       }
    }
    var_dump($result);
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 2021-04-26
      • 2019-05-13
      相关资源
      最近更新 更多