douping6871 2018-06-10 04:48
浏览 74
已采纳

将String转换为数组或多维数组,并将特定字符串作为键

I want to convert string into multidimensional array, so that I can display it in unordered list

Contents of $notes variable:

Conditions:
  Adult fares apply from 13 years old and above. Child fares apply from 4 to 
  12 years old
  Infants not included

What to bring:
  Sunscreen, water bottle, hat, sunglasses, camera, small 7kg overnight bag 
  if using the hop on hop off option

What to wear:
  Warm clothes, windbreaker, comfortable walking shoes

Insurance: 
  We highly recommend all passengers have travel insurance coverage

Optional extras paid on arrival:
  Helicopter joy flight over the 12 Apostles AUD145

Not included:
  Dinner (at own expen

What want an output like this

  [
     'conditions => ['some','some'],
     'what to bring' => ['content','content']
     .......
  ]

What I tried so far is using explode function

   explode(',',$notes)

But this is the output which I donot want

 array:8 [
    0 => """
       Conditions:

       Adults fares ....
       

      What to bring
      .....
    1 => "water bottle"
    2 => "hat"
    ......
 ]

So expected output as unordered list

     conditions
          1. ....
          2.....
     what to bring
           1....
           2....
     Inurance
           1..
           2...

notice that keys(conditions, what to bring..) are dynamic names, so it may change from time to time but the format is the the same

Any suggestions?

  • 写回答

1条回答 默认 最新

  • douzhang7603 2018-06-10 05:58
    关注

    You can explode the string by EOL, loop thru the array and check if the string ends with :, if it does, use it as the key.

    $notes = ''; //Your string here
    
    //Init variables
    $final = array();
    $tempKey = "";
    
    //Convert the string into an array
    $arr = array_filter(explode(PHP_EOL, $notes), 'trim');
    
    //Loop thru the array
    foreach($arr as $val) {
        if ( substr(trim($val), -1) === ':' ) $tempKey = rtrim(trim($val),":");
        else $final[ $tempKey ][] = trim($val);
    }
    
    echo "<pre>";
    print_r( $final );
    echo "</pre>";
    

    This will result to:

    Array
    (
        [Conditions] => Array
            (
                [0] => Adult fares apply from 13 years old and above. Child fares apply from 4 to
                [1] => 12 years old
                [2] => Infants not included
            )
    
        [What to bring] => Array
            (
                [0] => Sunscreen, water bottle, hat, sunglasses, camera, small 7kg overnight bag
                [1] => if using the hop on hop off option
            )
    
        [What to wear] => Array
            (
                [0] => Warm clothes, windbreaker, comfortable walking shoes
            )
    
        [Insurance] => Array
            (
                [0] => We highly recommend all passengers have travel insurance coverage
            )
    
        [Optional extras paid on arrival] => Array
            (
                [0] => Helicopter joy flight over the 12 Apostles AUD145
            )
    
        [Not included] => Array
            (
                [0] => Dinner (at own expen
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效