我有这种类型的数组回来了:
Array
(
[data(0)] => somevalue
[data(1)] => somevalue
[data(2)] => somevalue
)
我需要转换成这个:
Array (
[data] => Array (somevalue
[0] => somevalue
[1] => somevalue
[2] => somevalue
)
)
请记住,可能还有其他键,所以简单地对计数运行for循环并输入每个值不是一种选择。
我想我会通过发布上面的简单例子来简化事情,但我想这还不够充分。
数据是从PayPal返回的字符串。PayPal有一个名为deformatNV()的函数,它完成了将其放入数组的初始工作,但它不是PHP可以处理的数组。它可以看起来像这样:
Array(
[responseEnvelope.ack] => somevalue
[responseEnvelope.timestamp] => somevalue
[responseEnvelope.build] => somevalue
[responseEnvelope.correlationId] => somevalue
)
它也可以有类似的东西:
Array(
[personalData(0)] => somevalue
[personalData(1)] => somevalue
[personalData(2)] => somevalue
)
这太难看了,所以下面的第一步修复了虚线数组,但我要处理的是这些带括号的键。
$data = array();
foreach ($array as $key => $value) {
$subkey = "";
$_keys = explode('.', $key);
if(count($_keys) > 1){
$key = $_keys[0];
$subkey = $_keys[1];
}
if(preg_match("/([0-9]+)/", $key, $matches)){
$key = preg_replace("/'([0-9]+')/", "", $key);
$data[$key][$matches[0]][$subkey] = $value;
}
elseif($subkey)
$data[$key][$subkey] = $value;
else
$data[$key] = $value;
}
return $data;
有时有一些密钥是点状的,比如:key.subkey
如果某个.
可以出现,有时其他东西也可以出现。在开发任何解析算法之前,这个规范应该足够清晰
到目前为止,它可以通过在每个元素上循环并使用preg_split
函数分割信息来完成。以下代码将生成的数组放入$result
变量中。
$result = array();
foreach ($array as $key => $value) {
list($text, $subkey) = preg_split('/'W+/', "$key:END", 3, PREG_SPLIT_NO_EMPTY);
if($subkey=='END'){
$result[$text] = $value; continue;
}else{
$result[$text][$subkey] = $value;
}
}
请参阅http://ideone.com/CJHHZ
请记住,它只是用非单词字符('W
)拆分字符串。'W
匹配除a-z
、A-Z
、0-9
和_
之外的任何字符。