Get particluar values from a string in PHP - php

My string is :
$mystring = "https://maps.google.com/?ll=37.0625,-95.677068&spn=37.188995,86.572266&t=m&z=4";
Now I want those values which I have marked as bold from the string. How can I achieve this with PHP?

Use the following functions parse_url and parse_str. You could do something like this the following
$url = "https://maps.google.com/?ll=**37.0625,-95.677068**&spn=**37.188995,86.572266**&t=m&z=4";
$parts = parse_url($url);
if(isset($parts['query'])) {
parse_str(urldecode($parts['query']), $result);
print_r($result)
}

use explode or parse_url or parse_str

you'll have to use $_GET['ll'] and $_GET['spn'] to repectively obtain 37.0625,-95.677068 and 37.188995,86.572266

Here regular expression will be most efficient to parse your required values.
$url = "https://maps.google.com/?ll=37.0625,-95.677068&spn=37.188995,86.572266&t=m&z=4";
$regex = "/[-]*\d+.\d*/";
preg_match_all($regex,$url,$out, PREG_PATTERN_ORDER);
// $out = array(1) { [0]=> array(4) { [0]=> string(7) "37.0625" [1]=> string(10) "-95.677068" [2]=> string(9) "37.188995" [3]=> string(9) "86.572266" } }

Related

Converting numeric array to associative array using implode or explode?

So lets say I have an array and when I var_dump(); it, it has the following output:
[1]=>
string(20) "Name: Kevin"
[2]=>
string(20) "Age: 20"
Can I manipulate it using implode or explode so that the output would look like this:
[Name]=>
string(5) "Kevin"
[Age]=>
string(2) "20"
Any help would be appreciated.
You can use explode() with trim()
$array = [];
foreach($initialArray as $data){
$exploded = explode(':',$data);
$array[trim($exploded[0])] = trim($exploded[1]);
}
Output:-https://3v4l.org/3q0i5

numbers and next line only in the textarea field

I m trying to use following pattern
65465465465654
6546465465465465
5646545646464
6545646456
6454646456
in text area
please anyone help me
to check preg_match pattern
for the above input type
I want to take mobile numbers separated by the next line character.
Try this:
$numbers = "65465465465654
6546465465465465
5646545646464
6545646456
6454646456";
preg_match_all("/([0-9]*)\n/", $numbers, $resultArray);
foreach ($resultArray as $result) {
preg_replace("/\n/", "", $result);
}
Output:
array(4) {
[0]=>
string(14) "65465465465654"
[1]=>
string(16) "6546465465465465"
[2]=>
string(13) "5646545646464"
[3]=>
string(10) "6545646456"
}

PHP regex preg_grep change string path

I have array:
$array = array(
"C:/path/something1/something2/dir",
"C:/path1/something/something2/dir2\nextdir",
"C:/path2/something/dir2\nextdir\next",
"C:/path/something3/something6/something7/dir5\nextdir2\next"
);
All that is before the last sign "/" with him to disappear.
I want something like that:
$array = array(
"dir",
"dir2\nextdir",
"dir2\nextdir\next",
"dir5\nextdir2\next"
);
I need regex
$new_array = preg_grep("/regex/", $array);
I have no idea how to write a regex.
I dont want like that:
foreach($array as $key => $val) {
$e = explode("/", $val);
$new_array[] = end($e);
}
preg_grep() does not change/replace the values, it returns the items that match the given regular expression. If you must use regex and replace the values, take a look at preg_replace() instead:
$array = preg_replace('~.*/~', '', $array);
var_dump($array);
Output
array(4) {
[0]=> string(3) "dir"
[1]=> string(12) "dir2\nextdir"
[2]=> string(17) "dir2\nextdir\next"
[3]=> string(18) "dir5\nextdir2\next"
}

Using PHP explode to create an array of words from $_GET

I'm having trouble using explode() in php.
I want to make an array of strings from the $_GET super global array.
The url will be like:
example/myproject.php?keywords=this+is+an+example
I want an array of the keywords so it should be like this:
myArray(6) = { [0]=> string(4) "this"
[1]=> string(2) "is"
[2]=> string(2) "an"
[3]=> string(7) "example" }
Here's my code:
$stringVals = explode("+",($_GET['keywords']));
var_dump($stringVals);
Here's the output:
array(1) { [0]=> string(30) "this is an example of a string" }
An example that works:
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
var_dump($pieces);
The output of this:
array(6) { [0]=> string(6) "piece1" [1]=> string(6) "piece2" [2]=>
string(6) "piece3" [3]=> string(6) "piece4" [4]=> string(6) "piece5"
[5]=> string(6) "piece6" }
I want the words from $_GET like that..
The "+" sign you see is actually just an encoded space. Therefore, you can split it normally using a space.
explode(' ', $_GET['keywords']);
Make sure you sanitize it if you're going to put it in a database.
Actually you can simply use:
explode(" ", $_GET['string'])
The + sign in the url actually means a space, not plus :- )
It's because spaces aren't allowed in the urls (url cannot have whitespaces), so it's actually converted to a plus sign.
In a normal GET request, the + in the URL will be converted back to spaces by the web server, so you should be exploding on ' '.
$stringVars = explode(' ', $_GET['keywords']);
See https://stackoverflow.com/a/2678602/1331451 for an explanation of why that is the case.
$myarray = explode(" ", $_GET['keywords']);
var_dump($myArray);
How's that?
Don't use plus symbol because The "+" sign you see is actually just an encoded space. use comma in URL while passing values from one page to another page here is solution after sending them in URL using comma separated form :-
$myArray = explode(',', $_REQUEST['keywords']);
after this you can get your data as following
$myArray[0]=this;
$myArray[1]=is;
$myArray[2]=an;
$myArray[3]=example;
$url = 'example/myproject.php?keywords=this+is+an+example';
$x = parse_url($url);
$y = str_replace("keywords=", "", $x["query"]);
var_dump(explode("+", $y));
First parse the url, second remove keywords=, next explode what's left by + sign.

PHP json-like-string split

I have this $str value :
[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"22\",\"gender\":\"Female\"}]
I want to split it into the following:
firstname:guest1,lastname:one,age:22
firstname:guest2,lastname:two,age:22
I tried explode (",",$str) , but it explode all using , as delimiter and I don't get what I want
anyone can help me ?
As Josh K points out, that looks suspiciously like a JSON string. Maybe you should do a json_decode() on it to get the actual data you're looking for, all organized nicely into an array of objects.
EDIT: it seems your string is itself wrapped in double quotes ", so you'll have to trim those away before you'll be able to decode it as valid JSON:
$str_json = trim($str, '"');
$guests = json_decode($str_json);
var_dump($guests);
I get this output with the var_dump(), so it's definitely valid JSON here:
array(2) {
[0]=>
object(stdClass)#1 (4) {
["firstname"]=>
string(6) "guest1"
["lastname"]=>
string(3) "one"
["age"]=>
string(2) "22"
["gender"]=>
string(4) "Male"
}
[1]=>
object(stdClass)#2 (4) {
["firstname"]=>
string(6) "guest2"
["lastname"]=>
string(3) "two"
["age"]=>
string(2) "22"
["gender"]=>
string(6) "Female"
}
}
JSON (JavaScript Object Notation) is not CSV (comma-separated values). They're two vastly different data formats, so you can't parse one like the other.
To get your two strings, use a loop to get the keys and values of each object, and then build the strings with those values:
foreach ($guests as $guest) {
$s = array();
foreach ($guest as $k => $v) {
if ($k == 'gender') break;
$s[] = "$k:$v";
}
echo implode(',', $s) . "\n";
}
Output:
firstname:guest1,lastname:one,age:22
firstname:guest2,lastname:two,age:22
(Assuming you do want to exclude the genders for whatever reason; if not, delete the if ($k == 'gender') break; line.)
If you split on ,'s then you will get all the other crap that surrounds it. You would then have to strip that off.
Looks a lot like JSON data to me, where is this string coming from?
If that is valid json, just run it through json_decode() to get a native php array...
Note that you may need to run it through stripslashes() first, as it appears you may have magic_quotes_gpc set... You can conditionally call it by checking with the function get_magic_quotes_gpc:
if (get_magic_quotes_gpc()) {
$_POST['foo'] = stripslashes($_POST['foo']);
}
$array = json_decode($_POST['foo']);
You need to use preg_replace function.
$ptn = "/,\\"gender\\":\\"\w+\\"\}\]?|\\"|\[?\{/";
$str = "[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"22\",\"gender\":\"Female\"}]";
$rpltxt = "";
echo preg_replace($ptn, $rpltxt, $str);
You can the php regular expression tester to test the result.
or use preg_match_all
$ptn = "/(firstname)\\":\\"(\w+)\\",\\"(lastname)\\":\\"(\w+)\\",\\"(age)\\":\\"(\d+)/";
$str = "[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"22\",\"gender\":\"Female\"}]";
preg_match_all($ptn, $str, $matches);
print_r($matches);
i still haven't get a chance to retrieve the JSON :
I var_dump the trimmed value as :
$str_json = trim($userdetails->other_guests, '"');
$guests = json_decode($str_json);
var_dump($str_json,$guests);
WHERE $userdetails->other_guests is the $str value I had before...
I get the following output :
string(169) "[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"23\",\"gender\":\"Female\"}]"
NULL
This mean the decoded json are NULL... strange

Categories