I need to cast $string = ("one","two","three,subthree","four") into PHP array like.
$data[0] => "one",
$data[1] => "two",
$data[2] => "three,subthree",
$data[3] => "four"
The issue is that the delimiter in 3rd variable contains comma so explode function is making the string into 5 variables instead of 4.
You can convert the string to JSON string and then decode like this
$string = '("one","two","three,subthree","four")';
$string = str_replace(['(', ')'], ['[', ']'], $string);
$array = json_decode($string, true);
print_r($array);
Working demo.
Edit:
If you have possibilities to have brackets [( or )] in string, you can trim by brackets [( or )] and explode by the delimiter ",". Example:
$string = '("one","two","three,subthree","four")';
$string = trim($string, ' ()');
$array = explode('","', $string);
print_r($array);
Another way is to use preg_match_all() by the patter ~"([^"])+"~
$string = '("one","two","three,subthree","four")';
preg_match_all('~"([^"]+)"~', $string, $array);
print_r($array[0]);
Regex explanation:
" matches a double quote
([^"]+) capturing group
[^"] any characters except double quote
+ one or more occurrence
" matches a double quote
Here's a shorter version to do that:
$string = '("one", "two,three")';
preg_match_all('/"([^"]+)"/', $string, $string);
echo "<pre>";
var_dump($string[1]);
Output:
array(2) {
[0]=>
string(3) "one"
[1]=>
string(9) "two,three"
}
You can use substr to remove the first (" and ") and then use explode:
$string = '("one","two","three,subthree","four")';
$s = substr($string,2,-2);
// now $s is: one","two","three,subthree","four
print_r(explode('","', $s));
Which outputs:
(
[0] => one
[1] => two
[2] => three,subthree
[3] => four
)
Live example: 3v4l
You can use explode with trim
$string = '("one","two","three,subthree","four")';
print_r(explode('","',trim($string,'"()')));
Working example : https://3v4l.org/4ZERb
A simple way which does the processing of quotes for you is to use str_getcsv() (after removing the start and end brackets)...
$string = '("one","two","three,subthree","four")';
$string = substr($string, 1, -1);
print_r(str_getcsv($string));
gives
Array
(
[0] => one
[1] => two
[2] => three,subthree
[3] => four
)
Main thing is that it will also work with...
$string = '("one","two","three,subthree","four",5)';
and output
Array
(
[0] => one
[1] => two
[2] => three,subthree
[3] => four
[4] => 5
)
I need to split my string input into an semicolon separate as below.
Original String: Loganathan <logu#gmail.com>; Nathan <nathan#gmail.com>; Tester <tester#gmail.com>;
I need split like
Loganathan, logu#gmail.com
Nathan, nathan#gmail.com
Tester, tester#gmail.com
How can I go about accomplishing this?
You can use explode function. explode link
$str = "Loganathan <logu#gmail.com>; Nathan <nathan#gmail.com>; Tester <tester#gmail.com>;";
$str = str_replace(array(" <",">"),array(", ",""),$str);
$converted = explode(";",$str);
print_r($converted);
Which gives you output like
Array(
[0] => Loganathan, logu#gmail.com
[1] => Nathan, nathan#gmail.com
[2] => Tester, tester#gmail.com
)
Use explode
$str = 'Loganathan <logu#gmail.com>; Nathan <nathan#gmail.com>; Tester <tester#gmail.com>;';
//Removing the "<>" symbols
$str = str_replace("<",",",$str);
$str = str_replace(">","",$str);
$result = explode(";", $str);
print_r(array_filter($result)); //Removing empty array values
Result:
Array
(
[0] => Loganathan ,logu#gmail.com
[1] => Nathan ,nathan#gmail.com
[2] => Tester ,tester#gmail.com
)
For the following code:
$string = "hello: Mister, Winterbottom";
$words = preg_split("/[\s,]+/", $string);
print_r ($words);
I get:
Array ( [0] => hello: [1] => Mister [2] => Winterbottom )
but I want the results to be:
Array ( [0] => hello [1] => Mister [2] => Winterbottom )
so that it will ignore the colon. How can I do it?
If you need to expand your character class with :, just put it inside it and use
/[\s,:]+/
See its demo here. Or, just use /\W+/ to split with 1+ non-word characters.
$words = preg_split("/[\s,:]+/", $string);
print_r ($words);
// Or
print_r(preg_split("/\W+/", $string));
See the PHP demo
$string = "hello: Mister, Winterbottom";
$words = preg_split("/[\s,]+/", $string);
$words[0] = rtrim($words[0],":");
print_r ($words);
I looked up splitting the string into array in google.I have found that str_split is working.By explode it's doesn't work in below condition.How can I split the string by explode()?
<?php
$string = "EEEE";
print_r(str_split($string));//Array ( [0] => E [1] => E [2] => E [3] => E )
print_r(explode("",$string));//Empty delimiter error
?>
As indicated by your error, explode requires a delimiter to split the string!
You should try,
$str = "EEEE";
$answer = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
alternative way would be preg_split.
$str = "X-Storage-Url: https://pathofanapi";
I would like to split this into an array ("X-Storage-Url", "https://pathofanapi").
Could someone tell me the regex for this ? Regex has always been my weakness.
Thanks.
$array = array_map('trim', explode(':', $str, 2));
As it's been said, explode is the right tool to do this job.
However, if you really want a regex, here is a way to do:
with preg_match:
$str = "X-Storage-Url: https://pathofanapi";
preg_match('/^([^:]+):\s*(.*)$/', $str, $m);
print_r($m);
output:
Array
(
[0] => X-Storage-Url: https://pathofanapi
[1] => X-Storage-Url
[2] => https://pathofanapi
)
or with preg_split;
$arr = preg_split('/:\s*/', $str, 2);
print_r($arr);
output:
Array
(
[0] => X-Storage-Url
[1] => https://pathofanapi
)