PHP键名数组

PHP键名数组,php,regex,arrays,key,rename,Php,Regex,Arrays,Key,Rename,我有一个数组$data fruit => apple, seat => sofa, 等等,我想循环,这样每个键都变成类型_key[0]['value'] type_fruit[0]['value'] => apple, type_seat[0]['value'] => sofa, 我认为会这样做的,就是 foreach ($data as $key => $value) { # Create a new, renamed, key.

我有一个数组$data

 fruit => apple,
 seat => sofa,
等等,我想循环,这样每个键都变成类型_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);
不起作用。我怎样才能让它工作

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

对于初学者

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

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

你的要求听起来。。。犯罪嫌疑人也许你的意思是这样的:

$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);

你是说你想把这些键分成不同的数组吗?或者你的意思是仅仅更改同一数组中的键

    $array = array();
    foreach ($data as $key => $value)
    {
        $array['type_' . strtolower($key)] = array(array('value' => $value));
    }
如果希望键是单独的变量,请执行以下操作:

    extract($array);
现在您将有$type_水果和$type_沙发。您可以找到$type_FROUT[0]['value'],因为我们在其中添加了一个额外的嵌套数组。

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


我不知道你在这里期待什么。你想让密钥看起来像类型[0]['value'],所以你可以使用$array[0]['value']]访问它?你在开玩笑吗?你刚才进一步中断了他对str_replace的调用,而不是使用preg_replace来修复它。type_$1[0]['value']将被视为字符串,因此type_$1[0]['value']将返回他正在寻找的值,尽管我同意他使用了错误的函数不,不是。中间有一块钱。这是获得语法错误的一个非常好的方法:意外的$。此外,这怎么/为什么更好?即使有效,使用不带引号的字符串文字也会发出通知,告诉您不应该这样做。别忘了降低键:
$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);