I have this piece of code:
<?php
$a = "dog";
$b = "cat";
$c = "pig";
$params = array($a, $b, $c);
some_function($params);
unset($a, $b, $c);
//echo "<br>".$a."<br>".$b."<br>".$c;
?>
Is here any elegant way, how to pass only variable names (not evaluated variables) to unset function? Something like:
unset($params); //but this doesn't work
Instead of
unset($a, $b, $c);
Thanks for any help.
The only way is to define variable names instead of variable values, and unset them in $GLOBALS:
<?php
$a = "dog";
$b = "cat";
$c = "pig";
$myvar = 'another var';
$params = array('a', 'b', 'c', 'myvar');
myunset($params);
function myunset($params){
foreach($params as $v){
unset($GLOBALS[$v]);
}
}
var_dump($myvar); //NULL
?>
Related
I have the following script
$a = 434343434343;
$b = $a *3;
$c = $a * 6;
print $a;
print $b;
print $c;
I want all three variables to be returned using the number_format($var) syntax. The three vars are being printed in various parts of an html template. What is the best way to do this for all three vars at once? Should I add these vars to an array and number_format the array?
The best that I can come up with is the following:
$a = 434343434343;
$b = $a *3;
$c = $a * 6;
$a = number_format($a);
$b = number_format($b);
$c = number_format($c);
print $a;
print $b;
print $c;
Is that preferred?
Put those numbers inside an array and format the array, it's faster.
$numbers = array();
$numbers['a'] = 434343434343;
$numbers['b'] = $numbers['a'] * 3;
$numbers['c'] = $numbers['a'] * 6;
foreach($numbers as $key => $val)
{
$numbers[$key] = number_format($val);
}
by the way, if you NEED the values as variables, you can extract them:
extract($numbers); //creates the variables $a, $b, $c
echo $a;
echo $b;
echo $c;
You can see it in action right here.
Seems I found a much better solution.
$a = number_format(434343434343);
$b = number_format($a *3);
$c = number_format($a * 6);
//$a = number_format($a);
//$b = number_format($b);
//$c = number_format($c);
//output
print $a;
print $b;
print $c;
function a(&$c, &$d){
$c = &$d;
}
$a = 1;
$b = 2;
a($a, $b);
echo $a;
output is 1,but shouldn't it be outputting 2 as $c is referencing $d. $c and $a reference to the same value,then $c refer to the value of $d which refer to $b so ultimately $a should refer to $b, isn't it correct?
For the operation you seek you must remove the ampersand reference used within the function a.
Example
function swap (&$one, &$two) {
$tmp = $one; // One is stored temporarily
$one = $two; // Two is stored in One
$two = $tmp; // Temporary data retrieved and stored in two
unset($tmp); // Temporary variable destroyed
}
// Set the variables
$a = 1;
$b = 2;
echo $a . " - " . $b . "<br />"; // See output as: 1 - 2
swap($a, $b);
echo $a . " - " . $b; // See output as: 2 - 1
in line
$c = &$d;
$a is referring to the address of $b but not to $b, then you can try this:
<?php
function foo(&$c, &$d){
$c = $d;
}
$a = 1;
$b = 2;
foo($a, $b);
echo $a;
?>
I have two valriables in
$a="1:2:3";
$b="1:3:4:5";
Is there any simple method to add 4 and 5 in variable $a. Means i want the value of variable to be
$a="1:2:3:4:5"
A one line solution:
$result = implode(':', array_unique(array_merge(explode(':', $a), explode(':', $b))));
An even shorter one would be:
$result = implode(':', array_unique(array_merge(explode(':', "$a:$b"))));
$a2 = explode(":" , $a);
$b2 = explode(":" , $b);
foreach($b2 as $val)
{
if(in_array($val , $a2))
//do what you want
}
try this
$a="1:2:3";
$b="1:3:4:5";
$a = explode(':', $a);
$b = explode(':', $b);
$c = array_unique(array_merge($a,$b));
$a = implode(':', $c);
echo $a;
I notice that $a is ordered, so you can apply sort to the new array
$sort = SORT_NUMERIC;
$a = implode(':',array_uniqe(array_merge(explode(':',$a),explode(':',$b)),$sort));
See array_unique to other possible sorts.
I was wondering if it could be possible to make a substitution between the values of two variables, in PHP.
I can explain it better:
<?php
$a = "Cat";
$b = "Dog";
// The strange/non-existent function I am talking about //
MakeSubstitution($a, $b);
// After this (non-existent) function the values of the variables should be:
// $a = "Dog"
// $b = "Cat"
?>
So, does it exist? I made searches but I found no results.
Thanks in advance.
Try this :
$a = "Cat";
$b = "Dog";
list($a,$b) = array($b,$a);
echo $a;
echo $b;
Handle them by reference in a function, and swap their values:
function swap ( &$a, &$b ) {
$t = $a; // Create temp variable with value of $a
$a = $b; // Assign to $a value of $b
$b = $t; // Assign to $b value of temp variable
}
$dog = "dog";
$cat = "cat";
swap($dog, $cat);
echo $dog; // Output 'cat'
Apparently you can use a bitwise operator too, and avoid the overhead of creating a temporary function/var/array:
$cat = "cat";
$dog = "dog";
$cat = $cat ^ $dog;
$dog = $cat ^ $dog;
$cat = $cat ^ $dog;
echo $cat . $dog; // Output 'dogcat'
Managed to find a great illustration of the bitwise approach: https://stackoverflow.com/a/528946/54680
See this code:
<?php
$a = rand(1, 10000000000);
$b = "abcdefghi";
?>
How can I insert $b into a random position of $a?
Assuming "casual" means random:
<?php
$a = rand(1, 10000000000);
$b = "abcdefghi";
//get a random position in a
$randPos = rand(0,strlen($a));
//insert $b in $a
$c = substr($a, 0, $randPos).$b.substr($a, $randPos);
var_dump($c);
?>
above code working: http://codepad.org/VCNBAYt1
Edit: had the vars backwards. I read "insert a into b,
I guess you could by treating $a as a string and concatenating it with $b:
$a = rand(1, 1000000);
$b= "abcd";
$pos = rand(0, strlen($a));
$a = substr($a, 0, $pos).$b.substr($a, $pos, strlen($a)-$pos);
and the results:
a=525019
pos=4
a=5250abcd19
a=128715
pos=5
a=12871abcd5
You should put {$b} on top of {$a} so that you can insert it to {$b}..
eg:
<?php
$b = "abcdefghi";
$a = rand(1, 10000000000);
$a .= $b;
echo $a;
?>
Sth like this :
<?php
$position = GetRandomPosition(); // you will have to implement this function
if($position >= strlen($a) - 1) {
$a .= $b;
} else {
$str = str_split($a, $position);
$a = $str[0] . $b . implode(array_diff($str, array($str[0])));
}
?>
Cast $a to string, then use strlen to get the length of $a. Use rand, with with the length of $a as the maximum, to get a random position within $a. Then use substr_replace to insert $b into $a at the position you've just randomized.