PHP键名数组
我有一个数组$dataPHP键名数组,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.
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);