合并具有相同键值的数组


merge arrays with same value of key

我使用php glob函数获取子目录中的图像,我不知道每个目录中存在多少个文件

目录名称id,我想将目录中的所有图像分类到一个数组中

$arr = [];
$dir = dirname(__FILE__)."/gulets";
$files = glob($dir."/*/*_gulet_o_*");
foreach ($files as $file) {
    $fullname = str_replace($dir."/", "", $file);
    $name = explode("/", $fullname);
    $name1 = array('id'=>$name[0],'name'=>$name[1]);
    $arr[] = $name1;
}   
header('Content-Type: application/json');
echo json_encode($arr);
[
{
"id": "10",
"name": "asdsad_gulet_o_1.jpg"
},
{
"id": "10",
"name": "wqes_gulet_o_10.jpg"
},
{
"id": "10",
"name": "qwsdf_gulet_o_11.jpg"
},
{
"id": "10",
"name": "sdce_gulet_o_12.jpg"
},
{
"id": "11",
"name": "fsdsc_gulet_o_13.jpg"
},
{
"id": "11",
"name": "drfvc_gulet_o_14.jpg"
},
{
"id": "12",
"name": "dsyjhk_gulet_o_15.jpg"
},
.
.

我需要像这样更改它:

    [
    {
    "id": "10",
    "name1": "asdsad_gulet_o_1.jpg",
    "name2": "wqes_gulet_o_10.jpg",
    "name3": "qwsdf_gulet_o_11.jpg"
    "name4": "sdce_gulet_o_12.jpg"
    },
    {
    "id": "11",
    "name1": "fsdsc_gulet_o_13.jpg"
    "name2": "drfvc_gulet_o_14.jpg"
    },
    {
    "id": "12",
    "name1": "dsyjhk_gulet_o_15.jpg"
.
.

你想要这样的东西:

foreach ($arr as $a) {
  $new_arr[$a['id']]['names'][] = $a['name'];
}

我认为创建像name1name2name3等索引是没有用的。您应该使用索引names创建子数组,并在那里输入您的名字。尝试这样的代码:

<?php
$array = array(
    array('id'=>1, 'name'=>'qwerty'),
    array('id'=>2, 'name'=>'asdf'),
    array('id'=>2, 'name'=>'hjkl'),
    array('id'=>1, 'name'=>'cvbnm'),
    array('id'=>1, 'name'=>'yuiop'),
);
$groups = array();
foreach($array as $singleRow)
{
    if(!isset($groups[$singleRow['id']]))
        $groups[$singleRow['id']] = array('id'=>$singleRow['id'], 'names'=>array());
    $groups[$singleRow['id']]['names'][] = $singleRow['name'];
}
$json = json_encode(array_values($groups));     
var_dump($json);

它输出:

[{"id":1,"names":["qwerty","cvbnm","yuiop"]},{"id":2,"names":["asdf","hjkl"]}]

而不是 -

$name1 = array('id'=>$name[0],'name'=>$name[1]);
$arr[] = $name1;

你可以使用类似的东西 -

$nameKey = 'name' . $name[0];
$name1 = array('id'=>$name[0],$nameKey =>$name[1]);
if (!empty($arr[$name[0]])) {
  $arr[$name[0]] = $arr[$name[0]] + $name1;
}
else {
  $arr[$name[0]] = $name1;
}

在 foreach() 循环结束后执行 -

$arr = array_values($arr);