为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP 中如何将字符串数组转换为关联数组?

在 PHP 中如何将字符串数组转换为关联数组?

PHP
牧羊人nacy 2023-12-15 15:22:57
我目前有一个包含三个字符串的数组,我的目标是将数组中的这三个字符串转换为单独的关联数组。这是数组:$arr = array(  "action: Added; amount: 1; code: RNA1; name: Mens Organic T-shirt; colour: White; size: XL",  "action: Subtracted; amount: 7; code: RNC1; name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y",  "action: Added; amount: 20; code: RNV1; name: Gift Voucher; style: Mens; value: £20",我想让关联数组的键是操作、数量、项目代码等,首先我想我应该尝试将数组的内容转换为字符串,以使其更易于管理。// Convert $arr to a string.$imploded = implode(": ",$arr);//echo $imploaded;$str = $imploded;$results = preg_split('/: [;,]/', $str);print_r($results);理想情况下,我希望数组看起来像这样。我对 PHP 很陌生,所以任何帮助和建议将不胜感激。array(    'action'    =>   '',    'amount'    =>   '',    'code'  =>   '',    'name'  =>   '',    'colour'    =>   '',    'size'      =>   '',);
查看完整描述

4 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

这可能是您所需要的:


<?php


$arr = array(   

  "action: Added; amount: 1; code: RNA1; name: Mens Organic T-shirt; colour: White; size: XL",    

  "action: Subtracted; amount: 7; code: RNC1; name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y",    

  "action: Added; amount: 20; code: RNV1; name: Gift Voucher; style: Mens; value: £20"

);

    



foreach ($arr as $string) {

   //Build array

   preg_match_all("/ [ ]?([^:]+): ([^;]+)[ ;]? /x", $string, $p);

   $array = array_combine($p[1], $p[2]);


   //Print it or do something else with it

    print_r($array);

}

https://3v4l.org/0cnhZ

查看完整回答
反对 回复 2023-12-15
?
守候你守候我

TA贡献1802条经验 获得超10个赞

很简单:


$arr = array(

    "action: Added; amount: 1; code: RNA1; name: Mens Organic T-shirt; colour: White; size: XL",

    "action: Subtracted; amount: 7; code: RNC1; name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y",

    "action: Added; amount: 20; code: RNV1; name: Gift Voucher; style: Mens; value: £20",

);

  

$data = [];

foreach ($arr as $line) {

    $newItem = [];

    foreach (explode(';', $line) as $item) {

        $parts = explode(':', $item);

        $newItem[trim($parts[0])] = trim($parts[1]);

    }

    $data[] = $newItem;

}


print_r($data);

在此处拨动。


查看完整回答
反对 回复 2023-12-15
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您可以使用 :


$tempArray = array();


foreach($arr as $data){

    $dataExplode = explode(';', $data);

      $temp = array();

    foreach($dataExplode as $key => $child){

              $childExplode = explode(':', $child);

              $temp[$childExplode[0]] = $childExplode[1];

    }

      array_push($tempArray, $temp);

}


print_r($tempArray); //to print array collection

您将获得单独的集合array()


查看完整回答
反对 回复 2023-12-15
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

只是为了好玩,还有一种方法可以做到这一点:


$arr = array(

  "action: Added; amount: 1; code: RNA1; name: Mens Organic T-shirt; colour: White; size: XL",

  "action: Subtracted; amount: 7; code: RNC1; name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y",

  "action: Added; amount: 20; code: RNV1; name: Gift Voucher; style: Mens; value: £20",

);


$result = array_map(function($line) {

    return array_combine(...array_map(null, ...array_chunk(preg_split('/[:;]\s+/', $line), 2)));


}, $arr);


print_r($result);

基本上,我们用两个可能的分隔符 : 或 ; 后跟空格来分割该行。


然后 array_chunk 函数将键和值分组在一起,我们为每一行得到如下所示的内容:


        Array

        (

            [0] => Array

                (

                    [0] => action

                    [1] => Added

                )


            [1] => Array

                (

                    [0] => amount

                    [1] => 1

                )

* * *

通过扩展和映射上面的数组,我们得到它的旋转版本,如下所示:


Array

        (

            [0] => Array

                (

                    [0] => action

                    [1] => amount

* * *

                )


            [1] => Array

                (

                    [0] => Added

                    [1] => 1

* * *

                )

        )

我们现在可以扩展这个数组并将其传递给array_combine函数,这样我们就有了一个很好的关联数组,其中填充了所需的键和值。


然后我们映射所有的线,这样我们就得到了格式良好的结果。

这是最后的小提琴。


查看完整回答
反对 回复 2023-12-15
  • 4 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信