2012-07-25 23 views
-1

我想改變數組的索引,但我不知道該怎麼做.. 以下陣列變化指數

array(
0 => array ('id' => 33, 'name' => 'test') 
1 => array ('id' => 37, 'name' => 'test2') 
) 

應該成爲的人 - 如果我想索引

array(
33 => array ('id' => 33, 'name' => 'test') 
37 => array ('id' => 37, 'name' => 'test2') 
) 

,或者如果我想名稱

array(
test => array ('id' => 33, 'name' => 'test') 
test2 => array ('id' => 37, 'name' => 'test2') 
) 

也爲多維陣列

array(
0 => array ('id' => 33, 'details' => array (name => 'test' , age ='50')) 
1 => array ('id' => 37, 'details' => array (name => 'test2' , age ='60')) 
) 

與名稱索引代替0和1 - 測試或TEST2

現在我提出的功能,但不與多維陣列

function index_array($array, $index){ 

$new_array = array(); 
foreach($array as $key => $value){ 
    $new_array[$index] = $array[$key]; 
} 

return $new_array; 
} 
+0

你爲什麼想這樣做?因爲它與在示例中設置子陣列一樣簡單。 – sean 2012-07-25 19:44:25

回答

3
$array = array(33 => $oldarray[0], 37 => $oldarray[1]); 
$array = array('test' => $oldarray[0], 'test2' => $oldarray[1]); 

由於右工作表達式的手邊在賦值之前評估,您也可以在兩邊使用$array而不是使用不同的變量名稱。

+0

你的答案很好,但不適用於多維陣列..我已經更新了我的答案 – Upper 2012-07-25 19:51:48

1

我會用映射表中第一部分,或簡單foreach第二部分做:

<?php 

$arr = array(
    0 => array('id' => 33, 'name' => 'test'), 
    1 => array('id' => 37, 'name' => 'test2') 
); 

/* Convert to other indexes */ 
$mapping = array(
    0 => 33, 
    1 => 37 
); 

foreach($arr as $k => $v){ 
    unset($arr[$k]); 
    $arr[$mapping[$k]] = $v; 
} 

print_r($arr); 

/* Convert key to name field */ 
foreach($arr as $k => $v){ 
    unset($arr[$k]); 
    $arr[$v['name']] = $v; 
} 

print_r($arr); 

編輯:現在,我再次看了你的問題,第一部分是實際上與第二個相同,但隨後僅與id字段而不是name字段。

EDIT2:請注意,你必須使用另一個陣列寫入,避免覆蓋,當id場被用作替換將發生。

+0

我剛剛做了一個功能,但現在仍在工作中100% – Upper 2012-07-25 20:04:43

+0

多維部分非常簡單,只要具有上述代碼,作爲一個練習留給你去做。 – Joost 2012-07-25 20:07:23