2015-11-18 44 views
0

我有一個像(json_decode的結果)的數組:轉換數組對象,以一個關聯數組沒有的foreach

array(2) { 
    [0]=> 
    object(stdClass)#1 (3) { 
    ["key"]=> 
    string(6) "sample" 
    ["startYear"]=> 
    string(4) "2000" 
    ["endYear"]=> 
    string(4) "2015" 
    } 
    [1]=> 
    object(stdClass)#2 (3) { 
    ["key"]=> 
    string(13) "second_sample" 
    ["startYear"]=> 
    string(4) "1986" 
    ["endYear"]=> 
    string(4) "1991" 
    } 
} 

我想將它轉換爲數組,如:

array(2) { 
    ["sample"]=> 
    array(2) { 
    ["startYear"]=> 
    string(4) "2000" 
    ["endYear"]=> 
    string(4) "2015" 
    } 
    ["second_sample"]=> 
    array(2) { 
    ["startYear"]=> 
    string(4) "1986" 
    ["endYear"]=> 
    string(4) "1991" 
    } 
} 

有美女方法來做到這一點(curently我使用foreach,但我不知道這是一個最佳的解決方案)。

增加了代碼示例:

<?php 
$str='[{"key":"sample","startYear":"2000","endYear":"2015"},{"key":"second_sample","startYear":"1986","endYear":"1991"}]'; 

$arr=json_decode($str); 

var_dump($arr); 

$newArr=array(); 

foreach ($arr as $value){ 
$value=(array)$value; 
$newArr[array_shift($value)]=$value; 

} 

var_dump($newArr); 
+1

使用'foreach'聽起來像一個非常理智的方式來此。 –

回答

1

您可以使用array_reduce

$myArray = array_reduce($initialArray, function ($result, $item) { 
    $item = (array) $item; 

    $key = $item['key']; 
    unset($item['key']); 

    $result[$key] = $item; 

    return $result; 
}, array()); 
+0

我明確地得到了key'key'而不是'array_shift'的順序; JSON字典沒有固有的順序。 – deceze

+0

你是對的@deceze ..我會更新我的答案..謝謝 –

+0

@deceze檢查更新的答案 –

0

只要您可以使用array_map等作爲

$result = array_map('get_object_vars',$your_array); 

編輯:

在檢查代碼之後,您已經在此處添加了一個示例,因此不需要使用額外的函數或循環將對象數組轉換爲關聯數組,而只需將第二個參數true傳遞給json_decode函數,如

$arr = json_decode($json,true); 

Demo

+0

這不會提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/10248821) – Rajesh

+1

@RajeshJadav這不能提供答案? –

+0

我認爲這個回答應該是評論 – Rajesh