smk3108
smk3108

Reputation: 131

PHP - string to multidimensional array

Here is my Input:

WINDMILL_1 DOOR OPEN , ABSWITCH1 OPEN , ABSENSE1 OPEN , ABSWITCH2 OPEN , ABSENSE2 OPEN , EVENT Time:11:30:00 : 03/08/2096 WINDMILL_1 DOOR OPEN , ABSWITCH1 OPEN , ABSENSE1 OPEN , ABSWITCH2 OPEN , ABSENSE2 OPEN , EVENT Time:11:30:00 : 03/08/2096 WINDMILL_1 DOOR OPEN , ABSWITCH1 OPEN , ABSENSE1 OPEN , ABSWITCH2 OPEN , ABSENSE2 OPEN , STATUS , ALARM ON Time:12:46:01 : 25/01/2012

MY OUTPUT

Array(
    [0] => Array(
        [0] => DOOR OPEN
        [1] => ABSWITCH1 OPEN
        [2] => ABSENSE1 OPEN
        [3] => ABSWITCH2 OPEN
        [4] => ABSENSE2 OPEN
        [5] => EVENT Time:11:30:00 : 03 / 08 / 2096
    )

    [1] => Array(
        [0] => DOOR OPEN
        [1] => ABSWITCH1 OPEN
        [2] => ABSENSE1 OPEN
        [3] => ABSWITCH2 OPEN
        [4] => ABSENSE2 OPEN
        [5] => EVENT Time:11:30:00 : 03 / 08 / 2096
    )

    [2] => Array(
        [0] => DOOR OPEN
        [1] => ABSWITCH1 OPEN
        [2] => ABSENSE1 OPEN
        [3] => ABSWITCH2 OPEN
        [4] => ABSENSE2 OPEN
        [5] => STATUS
        [6] => ALARM ON Time:12:46:01 : 25 / 01 / 2012
    )
)

I managed to bring the above output with this code

$arr = explode("|", $string);
foreach ($arr as $key => $val)
{
    $arr[$key] = explode(',', $val);
}         
print_r($arr);

But what i need is

Array (
    [0] => Array (
        [DOOR] => OPEN
        [ABSWITCH1] => OPEN
        [ABSENSE1] => OPEN
        [ABSWITCH2] => OPEN
        [ABSENSE2] => OPEN
        [EVENT] => Time:11:30:00 : 03/08/2096
    ),    
    ...
)

Please help me out.

Upvotes: 0

Views: 1473

Answers (2)

anubhava
anubhava

Reputation: 785156

I'm a bit confused as don't see any pipe delimiter in your string. Anyway you can use this code:

// $str is your original string
$arr = array();
foreach (explode('WINDMILL_1 ', $str) as $s) {
    if (trim($s) != "")
       $arr[] = explode(', ', $s);
}
print_r($arr);

OUTPUT:

Array
(
    [0] => Array
        (
            [0] => DOOR OPEN 
            [1] => ABSWITCH1 OPEN 
            [2] => ABSENSE1 OPEN 
            [3] => ABSWITCH2 OPEN 
            [4] => ABSENSE2 OPEN 
            [5] => EVENT Time:11:30:00 : 03/08/2096 
        )

    [1] => Array
        (
            [0] => DOOR OPEN 
            [1] => ABSWITCH1 OPEN 
            [2] => ABSENSE1 OPEN 
            [3] => ABSWITCH2 OPEN 
            [4] => ABSENSE2 OPEN 
            [5] => EVENT Time:11:30:00 : 03/08/2096 
        )

    [2] => Array
        (
            [0] => DOOR OPEN 
            [1] => ABSWITCH1 OPEN 
            [2] => ABSENSE1 OPEN 
            [3] => ABSWITCH2 OPEN 
            [4] => ABSENSE2 OPEN 
            [5] => STATUS 
            [6] => ALARM ON Time:12:46:01 : 25/01/2012
        )

)

Upvotes: 0

scessor
scessor

Reputation: 16115

Change to:

$tmp1 = explode('|', $string);
foreach ($tmp1 as $key1 => $val1) {
    $tmp2 = explode(",", $val1);
    foreach ($tmp2 as $key2 => $val2) { 
        $tmp3 = explode(' ', trim($val2));
        $key = ( $tmp3[count($tmp3) - 2] == ':' ? 'EVENT' : $tmp3[count($tmp3) - 2] );
        $newArr[$key1][$key] = $tmp3[count($tmp3) - 1];
    }
}
print_r($newArr);

Also see this example.

Upvotes: 1

Related Questions