Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
I have an array, I can print it with
print_r($show_arr);
it gives me this output(html source)
Array
(
[0] => Marvel's Daredevil.S01E01 - Into the Ring.mp4
[1] => Marvel's Daredevil.S01E02 - Cut Man.mp4
[2] => Marvel's Daredevil.S02E05 - Kinbaku.mp4
[3] => Marvel's Daredevil.S02E06 - Regrets Only.mp4
)
how would I go about getting the array to look like this?
Array
(
Season[1] => Array
(
Array(
episode => "01 - Into the Ring",
file => "Marvel's Daredevil.S01E01 - Into the Ring.mp4",
)
Array(
episode => "02 - Cut Man",
file => "Marvel's Daredevil.S01E02 - Cut Man.mp4",
)
)
Season[2] => Array
(
Array(
episode => "05 - Kinbaku",
file => "Marvel's Daredevil.S02E05 - Kinbaku.mp4",
)
Array(
episode => "06 - Regrets Only",
file => "Marvel's Daredevil.S02E06 - Regrets Only.mp4",
)
)
I was bored. Just loop your array and use preg_match() to build the array using the matched groups:
foreach($show_arr as $val) {
preg_match('/[^.]+\.S([\d]+)E([0-9]+[^.]+).*/', $val, $m);
$result['Season'][(int)$m[1]][(int)$m[2]] = array('episode' => $m[2],
'file' => $m[0]);
}
[^.]+ is 1 or more NOT dot . characters
\.S([\d]+) is a dot . then S followed by 1 or more digits (capture as group 1)
E([0-9]+[^.]+) is E followed by 1 or more digits followed by 1 or more NOT dot . characters (capture as group 2)
Additionally, this indexes the subarray by the episode. If you don't want that, remove the [(int)$m[2]] and just use [].
Related
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
$db_string = "|1||3||1||5||1||3||8||1||10||2|2||13||2||15|";
$array = array_filter(explode("|", $db_string));
if(in_array("1", $array)){
echo"<li>
Honeymoon Packages
</li>";
}
RESULT is Coming
* Honeymoon Packages
* Honeymoon Packages
* Honeymoon Packages
* Honeymoon Packages
because in array 1 is there 4 times, how do I group this in array and print result one time without duplicate?
I do prefer splitting with a regex, so no empty values will ever occur.
$db_string = "|1||3||1||5||1||3||8||1||10||2|2||13||2||15|";
$array = preg_split('/\|/', $db_string, 0, PREG_SPLIT_NO_EMPTY);
Now the array has an element for each number in the listed order. With the help of array map we use the empty $data array and build a key for unique element. So we know how many entries are there per item.
$data = [];
array_map(function($e) use (&$data) { isset($data[$e]) ? $data[$e]++ : $data[$e] = 1; }, $array);
Array
(
[1] => 4
[3] => 2
[5] => 1
[8] => 1
[10] => 1
[2] => 3
[13] => 1
[15] => 1
)
You can use the keys to have each item uniquely.
print_r(array_unique(array_keys($data)));
Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 8
[4] => 10
[5] => 2
[6] => 13
[7] => 15
)
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 3 years ago.
Improve this question
I want to split text by sections and the names of the sections that are inside of === === So data is like
===A===
a
===B===
b
===C===
c
preg split is like:
$sections = preg_split('/===([^=]+)===(?!=)/', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
but if the data are like
===A===
a
====0====
0
===B===
b
===C===
c
It gets wrong (i need to split it only by sections with 3x === and ignore the other parts) that's why there is the negative look behind.
Edit: it turned out that problem was that split took last === from the ====0==== and made new fake section name until first === of ===B=== so it made from
====0====
0
===B===
new fake section like this (cutting away what is in parenthesis)
(====0=)===
0
===(B===)
Here is one approach using prep_match_all, with the following regex pattern:
(?!<=)={3,}[^=]+={3}(?!=).*?(?=[^=]={3}[^=]+={3}[^=]|$)
This pattern says to match a section header, being defined by three = with some other character(s) in the middle, followed by all content until reaching either another section header or the end of the entire input.
$input = "===A===
a
====0====
0
===B===
b
===C===
c";
preg_match_all("/(?!<=)={3,}[^=]+={3}(?!=).*?(?=[^=]={3}[^=]+={3}[^=]|$)/s", $input, $sections);
print_r($sections[0]);
This prints:
Array
(
[0] => ===A===
a
====0====
0
[1] => ===B===
b
[2] => ===C===
c
)
Note that we use the /s modified in the PHP regex pattern for dot all mode. This ensures that the .* used in the pattern matches across newlines.
A simple approach (although my regex is rusty) would be
preg_match_all("/(?:\s|^)===(\w*)===\s/", $input, $sections);
So just (?:\s|^)===(\w*)===\s which is whitespace or start of document, ==='s text and then ==='s and finally whitespace.
Gives...
Array
(
[0] => ===A===
[1] => ===B===
[2] => ===C===
)
Using...
$sections = preg_split("/(?:\s|^)===(\w*)===\s/", $input, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
gives...
Array
(
[0] => A
[1] => a
====0====
0
[2] => B
[3] => b
[4] => C
[5] => c
)
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 4 years ago.
Improve this question
I have a table with locations stored in the format:
30°28'25"
68°28'43"
In the process of converting from DMS to DEC, I'd need a function to convert the string 68°28'43" (no spaces among values-symbols) into
$deg = 68
$min = 28
$sec = 43
Or something similar. Thanks
Simply use preg_match_all :)
the following regex simply captures every digits (\d) which are contains exactly 2 numbers ({2}) and group them (the braces around the expression)
<?php
$value = "68°28'43\"";
preg_match_all('/(\d{2})/', $value, $matches);
print_r($matches);
$matches would be an array with the captured results (the digits)
Array
(
[0] => Array
(
[0] => 68
[1] => 28
[2] => 43
)
[1] => Array
(
[0] => 68
[1] => 28
[2] => 43
)
)
And then you can simply assign it to your variables with the list() function as follow:
list($deg, $min, $sec) = $matches[0];
echo $deg; // 68
echo $min; // 28
echo $sec; // 43
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 4 years ago.
Improve this question
I need to write a product basket for my website, but I can't remove an index from array. I wrote an array index below:
Array
(
[0] => Array
(
[urun_id] => 174
[urun_adi] => ANT-5527N - Dual Polarity Parabolic Dish Anten 4.8-6.1Ghz 27Dbi
[urun_fiyati] => 672
[urun_fiyati_kur] => TL
[urun_adeti] => 1
)
[1] => Array
(
[urun_id] => 149
[urun_adi] => Cloud Router Switch 16x SFP+(10G ) 1Gbit Eth
[urun_fiyati] => 1683
[urun_fiyati_kur] => TL
[urun_adeti] => 1
)
[2] => Array
(
[urun_id] => 175
[urun_adi] => ANT-5531N - Dual Polarity Parabolic Dish Anten 4.8-6.1Ghz 31Dbi
[urun_fiyati] => 694
[urun_fiyati_kur] => TL
[urun_adeti] => 1
)
)
You can use unset for this:
unset($array[2]); removes the element with index 2
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 years ago.
Improve this question
I have an array
Array
(
[0] => 34
[1] => 04:32 PM
[2] => 05:32 PM
[3] => MNL | ITLY
[4] => 2h 10m
[5] => PHP 9,222
[6] => 33
[7] => 04:32 PM
[8] => 04:32 PM
[9] => ITLY | MNL
[10] => 2h 10m
[11] => PHP 7,227
)
how can i perform arithmetic operation on value of index 5 and 11.
By using preg_replace you can strip the 'PHP' part and the comma from value.
echo preg_replace('| PHP (\d+),(\d+)|', '$1$2', $array[5]) + preg_replace('| PHP (\d+),(\d+)|', '$1$2', $array[11]);
or if the number of spaces is random '\s' is any whitespace char
echo preg_replace('|\s+PHP\s+(\d+),(\d+)|', '$1$2', $array[5]) + preg_replace('|\s+PHP\s+(\d+),(\d+)|', '$1$2', $array[11]);
or str_replace()