2016-03-14 25 views
0

相同的值合併陣列我使用PHP 水珠功能在子目錄獲取圖像,我不知道有多少文件在每個目錄與關鍵

目錄名是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" 
. 
. 
+3

你不能有2名或更多相同的密鑰的名字'name'。 – roullie

+0

@roullie是我更正了有問題的密鑰名稱 –

回答

1

我認爲創建索引像name1,name2name3等沒有用。你應該創建索引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"]}] 
+0

@Mohammad b,我修改了我的答案:而不是打印數組打印json。 – aslawin

+0

爲什麼它不排序從1到100它從10開始然後101我需要對每個數組進行排序和鍵與id相等以在angularjs中使用它 –

0

代替 -

$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); 
+0

它更改了密鑰名稱,但只返回了每個密鑰 –

+0

的一個值,但它不起作用併爲每個密鑰返回一個名稱 –

2

你想是這樣的:

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

它工作的很好,但爲什麼名稱進入括號[]而不是{}? –

+0

@Mohammadb,因爲名字是一個數組。 – aslawin