按子阵列值对数组进行分组

Ans*_*Kao 38 php arrays sorting algorithm

这是一个有趣的挑战.我有一个以下格式的子数组:

array
(
    a => array ( id = 20, name = chimpanzee )
    b => array ( id = 40, name = meeting )
    c => array ( id = 20, name = dynasty )
    d => array ( id = 50, name = chocolate )
    e => array ( id = 10, name = bananas )
    f => array ( id = 50, name = fantasy )
    g => array ( id = 50, name = football )
)
Run Code Online (Sandbox Code Playgroud)

我想根据每个子数组中的id字段将其分组为一个新数组.

array
(
    10 => array
          (
            e => array ( id = 10, name = bananas )
          )
    20 => array
          (
            a => array ( id = 20, name = chimpanzee )
            c => array ( id = 20, name = dynasty )
          )
    40 => array
          (
            b => array ( id = 40, name = meeting )
          )
    50 => array
          (
            d => array ( id = 50, name = chocolate )
            f => array ( id = 50, name = fantasy )
            g => array ( id = 50, name = football )
          )
)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Tim*_*per 97

$arr = array();

foreach ($old_arr as $key => $item) {
   $arr[$item['id']][$key] = $item;
}

ksort($arr, SORT_NUMERIC);
Run Code Online (Sandbox Code Playgroud)


amo*_*era 8

foreach($array as $key => $value){
   $newarray[$value['id']][$key] = $value;
}

var_dump($newarray);
Run Code Online (Sandbox Code Playgroud)

小菜一碟 ;)

  • 但实际上,将这个答案保留在页面上并没有新的价值。这个纯代码答案(与 Tim 的技术完全相同)是在 Tim 发布 10 分钟后发布的。 (2认同)

Her*_*ert 5

以下代码改编@Tim Cooper 的代码以Undefined index: id在内部数组之一不包含id的情况下减轻错误:

$arr = array();

foreach($old_arr as $key => $item)
{
    if(array_key_exists('id', $item))
        $arr[$item['id']][$key] = $item;
}

ksort($arr, SORT_NUMERIC);
Run Code Online (Sandbox Code Playgroud)

但是,它会删除没有 id 的内部数组。

例如

$old_arr = array(
    'a' => array ( 'id' => 20, 'name' => 'chimpanzee' ),
    'b' => array ( 'id' => 40, 'name' => 'meeting' ),
    'c' => array ( 'id' => 20, 'name' => 'dynasty' ),
    'd' => array ( 'id' => 50, 'name' => 'chocolate' ),
    'e' => array ( 'id' => 10, 'name' => 'bananas' ),
    'f' => array ( 'id' => 50, 'name' => 'fantasy' ),
    'g' => array ( 'id' => 50, 'name' => 'football' ),
    'h' => array ( 'name' => 'bob' )
);
Run Code Online (Sandbox Code Playgroud)

将完全删除 'h' 数组。

  • 这是一个“发明的问题”——没有在OP的问题中体现。可能更好地找到引起此问题的另一个问题并将其发布在那里。 (2认同)