【问题标题】:Splits multidimensional array into sub array with same key value将多维数组拆分为具有相同键值的子数组
【发布时间】:2019-01-01 21:06:16
【问题描述】:

我有一个具有相同键值 uid 的多维数组。我想 通过限制 foreach 循环将其转换为子数组。你可以看到 两个 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 循环我可以得到结果吗?

【问题讨论】:

  • 没有任何 for/foreach 是不可能的,但您可以创建一个不循环所有值的较小循环。

标签: php arrays


【解决方案1】:

没有循环是不可能的,但您可以将循环限制为唯一的 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

【讨论】:

  • @感谢您的解决方案。看起来更好
【解决方案2】:
$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
                )

        )

)

【讨论】:

  • 我不想使用foreach循环。任何其他方法
  • @ShaanSetia 那是不可能的!
  • 您正在输出一个关联数组,OP 想要一个索引数组。您应该在 print_r 之前使用 array_values
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多