Reputation: 131
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
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
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