PHP密钥名称数组

时间:2010-03-25 20:42:03

标签: php regex arrays key rename

我有一个数组$ data

 fruit => apple,
 seat => sofa,

等。我想循环,以便每个键成为type_key [0] ['value'],例如

 type_fruit[0]['value'] => apple,
 type_seat[0]['value'] => sofa,

以及我的想法会做到这一点,即

foreach ($data as $key => $value)
{
        # Create a new, renamed, key. 
        $array[str_replace("/(.+)/", "type_$1[0]['value']", $key)] = $value;

        # Destroy the old key/value pair
        unset($array[$key]);

}

print_r($array);

不起作用。我怎样才能使它发挥作用?

另外,我希望键中的所有内容(而不是值)都是小写的:是否有一种简单的方法可以做到这一点?感谢。

4 个答案:

答案 0 :(得分:1)

你的意思是你想把密钥分成不同的数组吗?或者你的意思是只更改同一个数组中的键?

    $array = array();
    foreach ($data as $key => $value)
    {
        $array['type_' . strtolower($key)] = array(array('value' => $value));
    }

如果您希望您的密钥是单独的变量,请执行以下操作:

    extract($array);

现在你将拥有$ type_fruit和$ type_sofa。你可以找到$ type_fruit [0] ['value']的值,因为我们在那里放了一个额外的嵌套数组。

答案 1 :(得分:0)

你的要求听起来......嫌疑。也许你的意思如下:

$arr = array('fruit' => 'apple', 'seat' => 'sofa');
$newarr = array();

foreach ($arr as $key => $value)
{
  $newkey = strtolower("type_$key");
  $newarr[$newkey] = array(array('value' => $value));
}

var_dump($newarr);

答案 2 :(得分:0)

首先,我不会更改输入数组,但会创建一个新的输入数组,除非您遇到严重的内存限制严重问题。
然后你不能简单地替换密钥来为数组添加更深层次的嵌套级别。 $x[ 'abc[def]' ]仍然只引用顶级元素,因为abc[def]被解析为一个字符串,但您需要$x['abc']['def']

$data = array(
 'fruit' => 'apple',
 'seat' => 'sofa'
);

$result = array();

foreach($data as $key=>$value) {
  $target = 'type_'.$key; 
  // this might be superfluous, but who knows... if you want to process more than one array this might be an issue.
  if ( !isset($result[$target]) || !is_array($result[$target]) ) {
    $result[$target] = array();
  }
  $result[$target][] = array('value'=>$value);
}

var_dump($result);

答案 3 :(得分:-1)

为初学者

$array[str_replace("/(.+)/", "type_$1[0]['value']", $key)] = $value;

应该是

$array[str_replace("/(.+)/", type_$1[0]['value'], $key)] = $value;