如何使用PHP将具有特殊结构的数组转换为键值对数组?

时间:2018-11-22 13:23:39

标签: php arrays regex

这是我想要做的事情的来源:

  1. 来源:a11993b18486c13240388
  2. 到目前为止我所做的事情:
$array = preg_split("/(,?\s+)|((?<=[a-z])(?=\d))|((?<=\d)(?=[a-z]))/i", $ref);

我正在尝试将生成的$ array转换为对象:

[
    "a",
    "11993",
    "b",
    "18486",
    "c",
    "13240388"
]

通过2分组,其中第一项是键,第二项是值: 以下是我想要的结果:

{
    "a"=>"11993",
    "b"=>"18486",
    "c"=>"13240388"
}

也许有更好的方法可以做到这一点? 如果有人请我对此给予指导,我将不胜感激。

3 个答案:

答案 0 :(得分:1)

您需要使用for遍历数组,并在循环中将值添加到新数组中。

$newArr = [];
for ($i=0; $i<count($arr); $i+=2)
    $newArr[$arr[$i]] = $arr[$i+1];

结果

Array
(
    [a] => 11993
    [b] => 18486
    [c] => 13240388
)

demo中查看结果


此外,如果您要在字符串使用正则表达式上使用

$ref = "a11993b18486c13240388";
preg_match_all("/([a-z])(\d+)/i", $ref, $matches);
$newArr = array_combine($matches[1], $matches[2]);

demo中查看结果

答案 1 :(得分:0)

尝试以下操作:

$list = array(
"a",
"11993",
"b",
"18486",
"c",
"13240388"

);

$new_list = array();

for($i=0;$i<count($list);$i=$i+2) {

    $new_list[$list[$i]] = $list[$i+1];

}

echo '<pre>'; print_r($new_list); echo '</pre>';

答案 2 :(得分:0)

我希望您的问题的答案是这样,因为您正在寻找对象:-

$arr=[
    "a",
    "11993",
    "b",
    "18486",
    "c",
    "13240388"
];

$arrForObj = [];
for ($i=0; $i<count($arr); $i+=2){
    $arrForObj[$arr[$i]] = $arr[$i+1];
}

$obj=(object)$arrForObj;
echo "<pre>";
var_dump($obj);