更改多维数组的键

3

我有一个多维数组,如下所示。我该如何更改以“id of”开头的键?

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']);
}

在我的情况下,关键字是动态改变的(我的多维数组中有数千个关键字,它们是随机的,但始终以“id of…”开头)

谢谢!


你想改变意思,不想显示出来吗? - fello
我想要更改键的名称,但不想更改其值。 - user657821
你只需要ID而不是九十万的ID吗?因为你的键值在动态更改,你在哪里更改它的代码?你需要展示更多的代码。我觉得你的ID旁边有一个动态变量在回显或打印它。 - fello
你最终想要做什么?我不明白“键动态更改”的部分;数组是原样提供给你的吗?你能否在使用的查询中更改字段名称(假设那就是它)? - Jared Farrish
3个回答

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
        )

)

最好使用 substr 而不是 strpos - Gumbo
@Gumbo - 不太明白你的评论。你是说用 substr 替换 strpos 的使用吗? - Jared Farrish
@OZ_:是的。如果你只需要查看前6个字符,那么就不需要搜索整个字符串了。 - Gumbo
@Jared Farrish:我说的是前六个字符,而不是前五个。 - Gumbo
@Gumbo - 我认为这并不重要,我会让原帖作者决定。 - Jared Farrish
@Jared Farrish:但我希望你至少知道它们的区别。 - Gumbo

2

这个解决方案非常简洁。Array_shift()函数一次完成两件事情:返回第一个元素(它的id),并将其从数组中删除,因此您可以直接将其分配给 $new_array 的'id'属性。

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

1
如果“id of”键始终是数组的第一个元素,则可以使用以下内容:
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']更改为您希望的新键。

我很抱歉,但我无法识别要翻译的文本。请提供您要翻译的具体文本。谢谢! - OZ_
@OZ_ 我想我理解得没错... 如果他想要更改键名,他可以使用 $value['desired_key']。也许我漏掉了什么。 - davishmcclurg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接