我有一个数组$ 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);
不起作用。我怎样才能使它发挥作用?
另外,我希望键中的所有内容(而不是值)都是小写的:是否有一种简单的方法可以做到这一点?感谢。
答案 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;