Could you trim all $_POST vars? because i have a very long list right now for trim each var. looks very unprofessional. i thought trim($_POST); would maybe work but it didnt :]
you can do this with array_map:
$_POST = array_map('trim', $_POST);
Works with multi-dimensional arrays
array_walk_recursive($_POST, function (&$val)
{
$val = trim($val);
});
foreach($_POST as &$p) $p = trim($p);
Quick and simple:
foreach($_POST as $key => $val)
{
$_POST[$key] = trim($val);
}
The simplest, and cleanest (in my opinion), is to use the built in array_map function:
array_map('trim', $_POST);
You can also apply a method of your own by passing an array as the first callback-parameter like so:
array_map(array('My_Class', 'staticMethod'), $_POST); // Invoke a static method
array_map(array($myObject, 'objectMethod'), $_POST);
// Invoke $myObject->objectMethod for each element of $_POST
Update based on a comment below
Sometimes the $_POST array may contain arrays. If you want to trim contents of those arrays as well, there are many custom implementations of array_map_recursive available in the PHP manual user notes. Go there and choose one for yourself. If you don't like to take a custom implementation, array_walk_recursive is also a good option for you.
You can do this with array_walk().
Using recursive function you can do that.
PHP
// Static $_POST Array.
$_POST['1']='one ';
$_POST['2']=' two';
$_POST['3'][]=' three ';
$_POST['4'][][]=' four';
$_POST['5'][0][1][3]='five ';
// Recursive function for trim data.
function trim_recursive($array){
$return = array();
foreach($array as $key=>$values){
if(is_array($values)===true){
$return[$key] = trim_recursive($values);
}
else{
$return[$key] = trim($values);
}
}
return $return;
}
// Usage.
$_POST = trim_recursive($_POST);
Output
// Output before trim.
array(5) {
[1]=>
string(4) "one "
[2]=>
string(4) " two"
[3]=>
array(1) {
[0]=>
string(9) " three "
}
[4]=>
array(1) {
[0]=>
array(1) {
[0]=>
string(5) " four"
}
}
[5]=>
array(1) {
[0]=>
array(1) {
[1]=>
array(1) {
[3]=>
string(5) "five "
}
}
}
}
// Output after trim.
array(5) {
[1]=>
string(3) "one"
[2]=>
string(3) "two"
[3]=>
array(1) {
[0]=>
string(5) "three"
}
[4]=>
array(1) {
[0]=>
array(1) {
[0]=>
string(4) "four"
}
}
[5]=>
array(1) {
[0]=>
array(1) {
[1]=>
array(1) {
[3]=>
string(4) "five"
}
}
}
}
Related
I'm trying to unset a couple items from an array at once, send unsetted items to another array.
array(6) {
[0]=> string(65) "https://www.kintetsu-re.co.jp/mansion_kansai/outline/midosuji241/"
[1]=> string(41) "https://geo.8984.jp/outline/suminodo.html"
[2]=> string(56) "http://www.sohgoh-outline.jp/index.php?bunjo_number=0141"
[3]=> string(56) "http://www.sohgoh-outline.jp/index.php?bunjo_number=0136"
[4]=> string(56) "http://www.sohgoh-outline.jp/index.php?bunjo_number=0099"
[5]=> string(53) "https://www.sgr-sumai.jp/mansion/tezukayama21/outline"
}
Three links in this array starts with http://www.sohgoh-outline.jp . So I'm trying to unset those. But not one by one. I can already doing it. For example, I tried to locate those with strpos
$needle = "http://www.sohgoh-outline.jp/";
foreach ($link as $unset){
if (($index = strpos($unset, $needle)) !== false){
$renai [] = $unset[$index];
unset($unset[$index]);
}
}
But this error popping up.
Cannot unset string offsets
Any suggestions?
change your code like this:
foreach ($link as $k => $unset){
if ((strpos($unset, $needle)) !== false)
{
$renai [] = $link[$k]; // This will add the value to new array.
unset($link[$k]); // THIS WILL UNSET THE VALUE.
}
}
The simplest method is probably regex with preg_grep and array_diff.
$out = preg_grep("/.*?(sohgoh-outline\.jp).*/", $arr);
var_dump($out); //sohgoh-outline.jp links
$arr = array_diff($arr, $out);
var_dump($arr); // all but sohgoh-outline.jp links
Output of above code:
array(3) {
[2]=>
string(56) "http://www.sohgoh-outline.jp/index.php?bunjo_number=0141"
[3]=>
string(56) "http://www.sohgoh-outline.jp/index.php?bunjo_number=0136"
[4]=>
string(56) "http://www.sohgoh-outline.jp/index.php?bunjo_number=0099"
}
array(3) {
[0]=>
string(65) "https://www.kintetsu-re.co.jp/mansion_kansai/outline/midosuji241/"
[1]=>
string(41) "https://geo.8984.jp/outline/suminodo.html"
[5]=>
string(53) "https://www.sgr-sumai.jp/mansion/tezukayama21/outline"
}
https://3v4l.org/Um46H
I have a variable list of arrays, the list depend of user input. each time the program is called a new set of single arrays is generated.
I been searching for solutions but apparently all solution refer to array of arrays.
Originally the data are from database using:
for ($i = 0; $runrwos= mysql_fetch_assoc($run); $i++) {}
after the loop data are inserted in an array:
$data[$i] = array();
Using a foreach () {} function data are manipulated with mathematical operations to get the desired outcome.
The result will output two string of data,
$A is a numeric data
$B has alphabetic value
$explodA = explode(" ", $A);
$explodB = explode(" ", $B);
Then I combine the result
$new = array_combine($explodA, $explodB);
when I check result I with
var_dump($new);
I get the following result:
array(1) { [1204]=> string(8) "Home2017" }
array(1) { [1183]=> string(8) "Home2018" }
array(1) { [1204]=> string(4) "Stan" }
array(1) { [1204]=> string(7) "Jun2017" }
array(1) { [1173]=> string(9) "APRIL2017" }
.......................................
array(1) { [953]=> string(7) "UNE2018" }
array(1) { [1171]=> string(6) "MAY201" }
I need to sort this data as follow:
array(1) { [953]=> string(7) "UNE2018" }
array(1) { [1171]=> string(6) "MAY201" }
array(1) { [1173]=> string(9) "APRIL2017" }
array(1) { [1183]=> string(8) "Home2018" }
array(1) { [1204]=> string(8) "Home2017" }
array(1) { [1204]=> string(4) "Stan" }
array(1) { [1204]=> string(7) "Jun2017" }
Can someone direct in the right direction?
I guess the solution is simple but I cannot resolve
Absolutely doing my head in here over something that I'm sure is very simple...
I have 2 arrays.
$post_cats which are categories that any given post is in.
$ad_cats which is an array of categories in which ads are placed.
Basically, if a post has in its array of selected categories, a category that matches an item in the array of ad categories, then it must return the matching value/item.
$post_cats returns this
array(4) {
[0]=> array(1) { ["slug"]=> string(6) "energy" }
[1]=> array(1) { ["slug"]=> string(6) "global" }
[2]=> array(1) { ["slug"]=> string(8) "identify" }
[3]=> array(1) { ["slug"]=> string(5) "south" }
}
and $ad_cats returns this
array(6) {
[0]=> array(1) { ["slug"]=> string(5) "north" }
[1]=> array(1) { ["slug"]=> string(5) "south" }
[2]=> array(1) { ["slug"]=> string(4) "east" }
[3]=> array(1) { ["slug"]=> string(4) "west" }
[4]=> array(1) { ["slug"]=> string(6) "global" }
[5]=> array(1) { ["slug"]=> string(8) "fallback" }
}
The duplicated item there is "south", so in my mind the value of array_intersect($post_cats, $ad_cats); should be an array with a single item - "south", correct?
But its returning, what seems like, everything in either of the arrays... I can't for the life of me get it to work..
Using the above example, I need to return "south" to a variable.
So you are looking for items that are in both arrays? ...
What about something like this:
function find_duplicate($array1, $array2)
{
$list = array();
foreach($array1 as $value1)
{
foreach($array2 as $value2)
{
if($value1 == $value2) $list[] = $value1;
}
}
return $list;
}
The best way is to convert those arrays in arrays array_intersect can work with.
Considering:
$a; // first array
$b; // second array
then you would go with:
$a1 = array();
foreach ($a as $v) $a1[] = $v['slug'];
$b1 = array();
foreach ($b as $v) $b1[] = $v['slug'];
$c = array_intersect($a1, $b1);
PHP functions usually work with more powerful algorithms than what you may think; therefore it's a good choice to let PHP functions handle this kind of things.
This solution uses array_map to get at the values and takes the intersection of that
function mapper($a)
{
return $a['slug'];
}
$set1 = array_map('mapper', $post_cats);
$set2 = array_map('mapper', $ad_cats);
$result = array_intersect($set1, $set2);
PhpFiddle for testing.
Given:
$val = "font-size:12px;color:#ff0000;font-family:Arial";
The following code will explode the string twice, to produce an array of arrays:
$val = explode(';',$val);
foreach($val as &$v)
$v = explode(':',$v);
var_dump($val);
The output is:
array(3) {
[0]=>
array(2) {
[0]=>
string(9) "font-size"
[1]=>
string(4) "12px"
}
[1]=>
array(2) {
[0]=>
string(4) "fill"
[1]=>
string(7) "#ff0000"
}
[2]=>
&array(2) {
[0]=>
string(11) "font-family"
[1]=>
string(5) "Arial"
}
}
Is there a more efficient / cleaner way to achieve the same result?
I'd prefer something with no lambda functions since PHP 5.2 doesn't support them. But this is a purely intellectual question anyway, so, that's just a preference.
You can try with:
$input = "font-size:12px;color:#ff0000;font-family:Arial";
preg_match_all('/([^:]*?):([^;]*);?/', $input, $matches);
$output = array_combine($matches[1], $matches[2]);
Output:
array(3) {
["font-size"]=>
string(4) "12px"
["color"]=>
string(7) "#ff0000"
["font-family"]=>
string(5) "Arial"
}
I'd recommend against references--you can run into some odd errors. But your approach is fine. Alternatively, you could do something with array_map:
$val = array_map(function($v) { return explode(':', $v); }, explode(';', $val)));
array(2) {
["names"]=> array(4) {
[0]=> string(4) "Edit"
[1]=> string(6) "Delete"
[2]=> string(8) "Activate"
[3]=> string(10) "Deactivate"
}
["action"]=> array(4) {
[0]=> string(4) "ajax"
[1]=> string(4) "abc"
[2]=> string(4) "def"
[3]=> string(4) "xyz"
}
}
How do i loop through this in a single foreach loop?
Assuming both arrays are of the same size and have the same keys:
foreach($array['names'] as $k => $name) {
$action = $array['actions'][$k];
// do whatever you want to do with $name and $action
}
$newArr = array();
foreach($data['names'] as $i => $val) {
$newArr[$val] = $data['actions'][$i];
}
Or if you want a one liner at that
$newArr = array_combine($data['names'], $data['action']);
I guess the best way is a recursive function which can move through even three dimensions and more
function MoveThroughArray($arr)
{
foreach($arr as $value)
{
if(is_array($value))
MoveThroughArray($value);
else
// Do Something
}
}