Php 如何将此阵列改造为不同结构的阵列

Php 如何将此阵列改造为不同结构的阵列,php,arrays,Php,Arrays,我有一个如下所示的数组: [0] => Array ( [name] => typeOfMusic [value] => this_music_choice ) [1] => Array ( [name] => myMusicChoice [value] => 9 ) [2]

我有一个如下所示的数组:

    [0] => Array
        (
            [name] => typeOfMusic
            [value] => this_music_choice
        )

    [1] => Array
        (
            [name] => myMusicChoice
            [value] => 9
        )

    [2] => Array
        (
            [name] => myMusicChoice
            [value] => 8
        )
$return = array();
foreach($originalArray as $data){
    if(!isset($return[$data['name']])){
        // This is the first time we've seen this name,
        // it's not in $return, so let's add it
        $return[$data['name']] = $data['value'];
    }
    elseif(!is_array($return[$data['name']])){
        // We've seen this key before, but it's not already an array
        // let's convert it to an array
        $return[$data['name']] = array($return[$data['name']], $data['value']);
    }
    else{
        // We've seen this key before, so let's just add to the array
        $return[$data['name']][] = $data['value'];
    }
}
我想把它改造成大致如下的结构:

Array(
"typeOfMusic" => "this_music_choice",
"myMusicChoice" => array(9, 8)
)
我写了以下内容,但不起作用:

    foreach($originalArray as $key => $value) {
        if( !empty($return[$value["name"]]) ){
            $return[$value["name"]][] = $value["value"];
        } else {
            $return[$value["name"]] = $value["value"];
        }
    }

    return $return;
我已经尝试了很多不同的组合,试图让这个工作。我的原始数组可能包含多组需要转换为数组的键(即,不一定只有“myMusicChoice”需要转换为数组)


我做这件事毫无进展,希望能得到一些帮助。非常感谢。

您只需在数据上循环,并使用名称/值创建一个新数组。如果看到重复名称,则将该值更改为数组

大概是这样的:

    [0] => Array
        (
            [name] => typeOfMusic
            [value] => this_music_choice
        )

    [1] => Array
        (
            [name] => myMusicChoice
            [value] => 9
        )

    [2] => Array
        (
            [name] => myMusicChoice
            [value] => 8
        )
$return = array();
foreach($originalArray as $data){
    if(!isset($return[$data['name']])){
        // This is the first time we've seen this name,
        // it's not in $return, so let's add it
        $return[$data['name']] = $data['value'];
    }
    elseif(!is_array($return[$data['name']])){
        // We've seen this key before, but it's not already an array
        // let's convert it to an array
        $return[$data['name']] = array($return[$data['name']], $data['value']);
    }
    else{
        // We've seen this key before, so let's just add to the array
        $return[$data['name']][] = $data['value'];
    }
}

演示:

您只需在数据上循环,并使用名称/值创建一个新数组。如果看到重复名称,则将该值更改为数组

大概是这样的:

    [0] => Array
        (
            [name] => typeOfMusic
            [value] => this_music_choice
        )

    [1] => Array
        (
            [name] => myMusicChoice
            [value] => 9
        )

    [2] => Array
        (
            [name] => myMusicChoice
            [value] => 8
        )
$return = array();
foreach($originalArray as $data){
    if(!isset($return[$data['name']])){
        // This is the first time we've seen this name,
        // it's not in $return, so let's add it
        $return[$data['name']] = $data['value'];
    }
    elseif(!is_array($return[$data['name']])){
        // We've seen this key before, but it's not already an array
        // let's convert it to an array
        $return[$data['name']] = array($return[$data['name']], $data['value']);
    }
    else{
        // We've seen this key before, so let's just add to the array
        $return[$data['name']][] = $data['value'];
    }
}

演示:

这里有一个干净的解决方案,它使用


这是一个干净的解决方案,它使用


好东西。非常感谢。不知道为什么我的问题总是被“扣分”。它当然不鼓励使用该网站,因为似乎防止“减价”的唯一方法是在得到答案后立即删除一个问题?感谢火箭队的出色回答,也感谢mxmul的帮助。很高兴我能提供帮助:-我不知道为什么这个问题被记下来,我不认为这是一个坏问题。也许已经有一个类似的问题和答案了?这就是我所能想到的你为什么会被减价的原因。太棒了。非常感谢。不知道为什么我的问题总是被“扣分”。它当然不鼓励使用该网站,因为似乎防止“减价”的唯一方法是在得到答案后立即删除一个问题?感谢火箭队的出色回答,也感谢mxmul的帮助。很高兴我能提供帮助:-我不知道为什么这个问题被记下来,我不认为这是一个坏问题。也许已经有一个类似的问题和答案了?这就是我所能想到的你为什么会被减价的原因。请你告诉我减价的原因好吗?这篇文章简洁明了,足以说明我的勤勉。我错过什么了吗?谢谢。你能告诉我这个问题降价的原因吗?这篇文章简洁明了,足以说明我的勤勉。我错过什么了吗?谢谢。嗨,罗尼,这是一个很棒的解决方案。非常简洁。在发布问题之前,我确实查看了php数组函数的列表,看看是否有任何函数看起来可以完成这项工作,但我没有真正了解如何使用array\u reduce。我将坚持“接受”火箭队的答案,因为这对我来说是一个更简单的解决方案(在我的水平上),我理解这将使未来的故障查找更容易。但非常感谢您出色的解决方案。:-)嗨,罗尼,这是一个很棒的解决方案。非常简洁。在发布问题之前,我确实查看了php数组函数的列表,看看是否有任何函数看起来可以完成这项工作,但我没有真正了解如何使用array\u reduce。我将坚持“接受”火箭队的答案,因为这对我来说是一个更简单的解决方案(在我的水平上),我理解这将使未来的故障查找更容易。但非常感谢您出色的解决方案。:-)