dqvrlgi3247 2018-07-19 21:10
浏览 16
已采纳

将数组值转换为数组

I can't figure out how to effectively convert the values of this array from a string to array. I really appreciate any suggestion.

    array(6) {
  ["A"]=>
  string(31) "['B' => 3, 'C' => 5, 'D' => 9],"
  ["B"]=>
  string(41) "['A' => 3, 'C' => 3, 'D' => 4, 'E' => 7],"
  ["C"]=>
  string(51) "['A' => 5, 'B' => 3, 'D' => 2, 'E' => 6, 'F' => 3],"
  ["D"]=>
  string(51) "['A' => 9, 'B' => 4, 'C' => 2, 'E' => 2, 'F' => 2],"
  ["E"]=>
  string(41) "['B' => 7, 'C' => 6, 'D' => 2, 'F' => 5],"
  ["F"]=>
  string(31) "['C' => 3, 'D' => 2, 'E' => 5],"
}

Desired output:

    $graph = [
    'A' => ['B' => 3, 'C' => 5, 'D' => 9],
    'B' => ['A' => 3, 'C' => 3, 'D' => 4, 'E' => 7],
    'C' => ['A' => 5, 'B' => 3, 'D' => 2, 'E' => 6, 'F' => 3],
    'D' => ['A' => 9, 'B' => 4, 'C' => 2, 'E' => 2, 'F' => 2],
    'E' => ['B' => 7, 'C' => 6, 'D' => 2, 'F' => 5],
    'F' => ['C' => 3, 'D' => 2, 'E' => 5],
 ];
  • 写回答

4条回答 默认 最新

  • dongzhu0327 2018-07-19 22:15
    关注

    Seems like you're trying to convert array string to an array.

    You can repeat through loop or make function to get your desired output.

    I'm using regular expression with preg_match_all

    Code

    $rawArray  =  array("A"=>"['B' => 3, 'C' => 5, 'D' => 9],",
        "B"=>"['A' => 3, 'C' => 3, 'D' => 4, 'E' => 7],",
        "C"=>"['A' => 5, 'B' => 3, 'D' => 2, 'E' => 6, 'F' => 3],",
        "D"=>"['A' => 9, 'B' => 4, 'C' => 2, 'E' => 2, 'F' => 2],",
        "E"=>"['B' => 7, 'C' => 6, 'D' => 2, 'F' => 5],",
        "F"=>"['C' => 3, 'D' => 2, 'E' => 5],",
    );
    foreach($rawArray as $k => $v){
    preg_match_all("/\'(.)\'/", $v, $key);
    preg_match_all("/=> (\d)/", $v, $val);
    $graph[$k] = array_combine($key[1], $val[1]);
    }
    print_r($graph);
    

    Output

    Array
    (
        [A] => Array
            (
                [B] => 3
                [C] => 5
                [D] => 9
            )
    
        [B] => Array
            (
                [A] => 3
                [C] => 3
                [D] => 4
                [E] => 7
            )
    
        [C] => Array
            (
                [A] => 5
                [B] => 3
                [D] => 2
                [E] => 6
                [F] => 3
            )
    
        [D] => Array
            (
                [A] => 9
                [B] => 4
                [C] => 2
                [E] => 2
                [F] => 2
            )
    
        [E] => Array
            (
                [B] => 7
                [C] => 6
                [D] => 2
                [F] => 5
            )
    
        [F] => Array
            (
                [C] => 3
                [D] => 2
                [E] => 5
            )
    
    )
    

    Live demo

    Explanation:

    1. $rawArray is associate array, each of it's element contain string similar to php array.

    2. We're looping through array and converting that string to array by using preg_match_all and building $graph multidimension array.

    3. When loop execute first time $k is equal to A and $v is equal to ['B' => 3, 'C' => 5, 'D' => 9],

    4. First preg_match_all make array of keys from $v (['B' => 3, 'C' => 5, 'D' => 9],), and assign it to $key[1]. Now $key[1] is array ['B', 'C', 'D'].

    5. Second preg_match_all make array of values from $v (['B' => 3, 'C' => 5, 'D' => 9],), and assign it to $val[1]. Now $val[1] is array [2, 5, 9].

    6. We're combining$key[1]as keys and $val[1] as values by using array_combine to the $graph[$k] where $k is A.

    How preg_match_all works?

    preg_match_all($pattern, $string, $out);
    

    It's matches pattern from string and then assign result to the $out as array.

    Learn more about.
    preg_match_all
    regex pattern cheat sheet

    Note: We're using non-capturing pattern so, it's return both exact match and desired match... So our desired record found in$key[1].

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛