【问题标题】:How to convert an array has special structure into an array of key-value pairs using PHP?如何使用 PHP 将具有特殊结构的数组转换为键值对数组?
【发布时间】:2018-11-22 13:23:39
【问题描述】:

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

  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"
}

也许有更好的方法来做到这一点? 如果有人能指导我,我将不胜感激。

【问题讨论】:

    标签: php arrays regex


    【解决方案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

    【讨论】:

    • 效果很好,谢谢!我想知道是否可以通过正则表达式实现相同的目的,以便我可以将其减少到一行代码?
    • @jhondano 您的内容在数组中,但正则表达式适用于字符串。您应该将数组转换为字符串并运行正则表达式并准备导致编写多行代码的目标结构
    • 我明白,但是正如您在我的问题中看到的,来源是字符串:a11993b18486c13240388,这需要根据您的示例使用 for 进行拆分和分组。知道怎么做吗?
    【解决方案2】:

    尝试以下:

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

    【讨论】:

    • 这与我的答案完全相同。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2014-07-09
      • 2018-08-07
      • 1970-01-01
      • 2017-09-23
      • 2018-04-19
      相关资源
      最近更新 更多