2011-05-21 147 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; 
}