当前位置: 首页 > 知识库问答 >
问题:

将多维数组拆分为具有相同键值的子数组

淳于玺
2023-03-14

我有一个具有相同键值uid的多维数组。我想把它转换成子数组通过限制Foreachloop.you可以看到两个uid有值100和两个uid有值5465

$userdb=Array
(
    0 => Array
    (
        "uid"=> '100',
        "name" => 'Sandra Shush',
        "url"=> 'urlof100'
    ),

1 => Array
    (
        "uid"=> '5465',
        "name" => 'Sandra Shush',
        "url"=> 'urlof100'
    ),

2 => Array
    (
            "uid"=> '100',
        "name" => 'Sandra Shush',
        "url"=> 'urlof100'
    ),
3 => Array
    (
        "uid"=> '5465',
        "name" => 'Sandra Shush',
        "url"=> 'urlof100'
    ),

);

我想得到这样的阵列。

$userdb=Array
(

  0 => Array(
      0 => Array
      (
          "uid"=> '100',
          "name" => 'Sandra Shush',
          "url"=> 'urlof100'
      ),
      2 => Array
      (
          "uid"=> '100',
          "name" => 'Sandra Shush',
          "url"=> 'urlof100'
      )
    ),
  1=> Array(
    1 => Array
    (
        "uid"=> '5465',
        "name" => 'Sandra Shush',
        "url"=> 'urlof100'
    ),
    3 => Array
    (
        "uid"=> '5465',
        "name" => 'Sandra Shush',
        "url"=> 'urlof100'
    )
  )
);

我可以不使用foreach循环得到结果吗?

共有2个答案

芮明知
2023-03-14
$userdb=[ ["uid"=> '100', "name" => 'Sandra Shush',"url"=> 'urlof100'],
["uid"=> '5465', "name" => 'Sandra Shush',"url"=> 'urlof100'],
["uid"=> '100', "name" => 'Sandra Shush',"url"=> 'urlof100'],
["uid"=> '5465', "name" => 'Sandra Shush',"url"=> 'urlof100']];

  foreach($userdb as $value) {
        $result[$value['uid']][] = $value;
  }

print_r(array_values($result));

输出:

    Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [uid] => 100
                    [name] => Sandra Shush
                    [url] => urlof100
                )

            [1] => Array
                (
                    [uid] => 100
                    [name] => Sandra Shush
                    [url] => urlof100
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [uid] => 5465
                    [name] => Sandra Shush
                    [url] => urlof100
                )

            [1] => Array
                (
                    [uid] => 5465
                    [name] => Sandra Shush
                    [url] => urlof100
                )

        )

)
曾新立
2023-03-14

没有循环是不可能的,但是您可以将循环限制为唯一的uid。

// Get all uids to an flat array
$uid = array_column($userdb, "uid");

// Loop the unique uids and find all matching uids and place them in array
foreach(array_unique($uid) as $id){
    $new[] = array_intersect_key($userdb, array_intersect($uid, [$id]));
}
var_dump($new);

返回为您的预期结果。

https://3v4l.org/nWFVP

 类似资料:
  • 我正在寻找一个算法,可以分裂整数数组尽可能多的子数组与X的和。我试图创建数组从hi到low,但最后我只剩下2的束,不可能创建子集与奇数和。 [7,4]和剩余。

  • 基本上,我要问的是给定一个正方形2D阵列和一个有效的补丁大小(2D子阵列的大小),我将如何做到这一点。最终,我不需要以任何方式存储子阵列,我只需要找到每个子阵列的中值并将它们存储在一个一维阵列中。中值和存储到新阵列对我来说很简单,我只是不知道如何处理原始2D阵列并正确拆分它。我已经尝试了几次,但一直出现越界错误。我有一个4x4: 我需要像这样拆分它 < code>[1,2] [3,4] [2,3]

  • 我想检查是否可以将一个数组拆分为具有相同和的连续子数组。拆分数组还意味着删除数组的边框元素。 例如,要将其拆分为3个部分,我们需要删除到元素 通过删除这2个元素,就有3个相同和的连续子数组,和。 因此,如果可以将数组拆分为3个部分(等和)并删除它们之间的边界,则应返回true,否则应返回false。 返回的示例是。因为删除2个元素后,它将有4个元素,这些元素不能分组为3个相等的和 我不知道如何处理

  • 我有一个PHP数组,其中包含一组用户。每个用户都属于一个团队。阵列将如下所示。 $Array=Array('User1','User2','User3','User4','User5'); 我需要得出以下逻辑。 如果“User1”和“User2”属于同一个名为“Team1”的团队,而其他用户拥有单独的唯一团队,则应按如下所示对阵列重新排序。 $Array=Array('User1','User3'

  • 给定一个值数组,我如何将它分成由相等元素组成的? 给定这个数组 我想要这个输出 解决这一问题的一种可能方法是创建某种索引,以指示每个元素的出现情况。 最后使用索引重建输出数组。 但是,使用此解决方案,我会丢失原始值。当然,在这种情况下,这不是一个大问题(一个值仍然存在,即使重新创建,),但我想将此解决方案应用于像这样更复杂的数据结构 实际上,我正在寻找的函数是与相反的函数 我希望我已经说清楚了,如