user2338925
user2338925

Reputation:

Convert String into array or multidimensional array with specific string as key

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:\n
       Adults fares ....
       \n
      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?

Upvotes: 0

Views: 33

Answers (1)

Eddie
Eddie

Reputation: 26844

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
        )

)

Upvotes: 1

Related Questions