2011-05-21 85 views
3

我有一個多維數組,如下所示。如何更改以「ID」開頭的密鑰?更改多維數組的鍵

Array 
(
[0] => Array 
    (
     [id of ten] => 1871 
     [name] => bob 
    ) 

[1] => Array 
    (
     [id of nine hundred thousand] => 12581 
     [name] => barney   
    ) 

) 

通常情況下,你會做這樣的事情:

foreach ($array as $k=>$v) 
{ 
    $array[$k] ['id'] = $array[$k] ['old']; 
    unset($array[$k]['old']); 
} 

對我來說,關鍵是動態變化的(有成千上萬的鑰匙在我的多維數組,它們是隨機的,但他們總是會啓動w /「id ...」)

thx!

+0

直接分配到$ new_array要改變的意思你不希望它顯示? – fello 2011-05-21 15:16:26

+0

我想更改密鑰的名稱。我不想改變價值 – user657821 2011-05-21 15:43:19

+0

你只是想ID不是九十萬ID?因爲你認爲你的關鍵在於動態地改變哪裏是動態地改變它的代碼,你必須展示更多的代碼,我認爲你有一個動態變量旁邊的迴應或打印這個ID。 – fello 2011-05-21 15:54:35

回答

1

如果「的ID」關鍵始終是數組的第一個元素,可以使用以下命令:

foreach ($input as &$value) 
{ 
    $value['key'] = reset($value); 
    $key = key($value); 
    unset($value[$key]); 
} 

,否則以下工作對我來說:

foreach ($input as &$value) 
{ 
    foreach ($value as $key=>$el) { 
    if (substr($key, 0, 5) == 'id of') { 
     $value['key'] = $el; 
     unset($value[$key]); 
    } 
    } 
} 

在這兩個你可以將$value['key']更改爲任何你想要的新密鑰。

+0

查看來自OP – 2011-05-21 16:12:48

+0

的問題的第二條評論@OZ_我想我正確地理解了它......如果他想改變鍵名,他可以使用'$ value ['desired_key']'也許我錯過了一些東西。 – davishmcclurg 2011-05-21 16:17:59

2

我想知道如果這是你在找什麼:

<?php 

$array = array(
    array(
     "id of one" => 434, 
     "name" => "bob" 
    ), 
    array(
     "id of two" => 9323, 
     "name" => "ted" 
    ) 
); 

$c_array = count($array); 

for ($i = 0; $i < $c_array; $i++) 
{ 
    foreach ($array[$i] as $key => $value) 
    { 
     if (substr($key, 0, 5) == 'id of') { 
      $array[$i][substr($key, 6)] = $value; 
      unset($array[$i][$key]); 
     } 
    } 
} 

print_r($array); 

?> 

注:包括使用substr()代替strpos()。請參閱下面的Gumbo評論。

https://ideone.com/xBV5L

此輸出:

Array 
(
    [0] => Array 
     (
      [name] => bob 
      [one] => 434 
     ) 

    [1] => Array 
     (
      [name] => ted 
      [two] => 9323 
     ) 

) 
+0

更好地使用'substr'而不是'strpos'。 – Gumbo 2011-05-21 16:13:07

+0

@Gumbo - 不太贊同你的評論。你的意思是用substr替換strpos的用法? – 2011-05-21 16:17:37

+0

@Gumbo爲什麼?性能? – 2011-05-21 16:30:42

2

該溶液是很乾淨。 Array_shift,做兩兩件事一次:返回第一個元素(具有ID),並從陣列中刪除,這樣你就可以把它的「身份證」

$new_arr=array(); 
foreach ($array as $arr) 
{ 
    $new_arr[array_shift($arr)] = $arr; 
}