look at this simple script please
$c1 = $_GET[c1];
$c2 = $_GET[c2];
$c3 = $_GET[c3];
$c4 = $_GET[c4];
$c5 = $_GET[c5];
for($i = 1;$i <=5;$i++)
{
echo $c{$i};//or something else here :/
}
how can i print tha values of variables?
Thanks
You can see on php.net some good examples in the variable page. Read that and take a look at the examples.
Also, below is your piece of code fixed so it can work:
<?php
$c1 = $_GET[c1];
$c2 = $_GET[c2];
$c3 = $_GET[c3];
$c4 = $_GET[c4];
$c5 = $_GET[c5];
for($i = 1;$i <=5;$i++)
{
echo ${"c".$i};
}
You should use an array rather than individual variables.
For reference:
http://php.net/manual/en/language.types.array.php
If these values are closely related, consider changing their name attribute in your HTML/form.
HTML:
<form>
<input type="text" name="c[]" />
<input type="text" name="c[]" />
...
</form>
PHP:
<?php
if(!empty($_GET['c'])) {
foreach($_GET['c'] as $c) {
echo $c;
}
}
?>
Here's a better way of doing it, using Arrays, rather than individual variables, which works easier and more efficiently.
<?php
$array['c1'] = $_GET['c1'];
$array['c2'] = $_GET['c2'];
$array['c3'] = $_GET['c3'];
$array['c4'] = $_GET['c4'];
$array['c5'] = $_GET['c5'];
for ($i=1; $i>=5; $i++) {
echo $array['c' . $i];
}
?>
Perhaps PHP variable variables is what you are looking for.
$i = "c1";
print $$i;
I'll leave it to you to figure out how to construct correct values for 'i'.
This should work..
foreach($_GET as $id => $value){
echo $value;
}
even though this prints out every $_GET.
Related
im trying to play around in php, and its not going too well. I am trying to change a string through input fields in html
HTML PART
<form action="index2.php" method="POST">
<textarea name="text"><?php echo $search_replace; ?></textarea><br>
search<br><input type="text" name="search"><br>
replace<br><input type="text" name="replace">
<input type="submit">
</form>
php part
$text = $_POST[text];
$search = $_POST[search];
$replace = $_POST[replace];
$search_replace = str_replace($search, $replace, $text);
this works, but i wanted to try to put all the variables in a for loop just to try new things out. this is what i ended up with (probably should have used foreach):
$field = array('text', 'search', 'replace');
for($i = 0; i > 3; $i++) {
if(isset($_POST[$field[$i]]) &&!empty($_POST[$field[$i]])) {
$field[$i] = $_POST[$field[$i]];
}
}
$search_replace = str_replace($field[1], $field[2], $field[0]);
$field[0] still has 'text' in it. shouldnt the value after the for loop be $_POST[$field[0]]? Do i need to create seperate arrays? one with the name of the fields and one empty to store $_POST[field[i]]?
Change like this:
for($i = 0; $i < 3; $i++)
{
if(isset($_POST[$field[$i]]) &&!empty($_POST[$field[$i]])) {
$field[$i] = $_POST[$field[$i]];
}
In your code the loop was like this:
for($i = 0; i > 3; $i++)
In which you forgot to add $ symbol before the the second 'i' in your for loop.
And the second condition was $i > 3.
You initialized $i as 0 and is checking whether $i is greater than 3, and if it is greater than 3, you increment $i, which is never going to happen as $i is 0 initially.
So it must be $i<3
You can do it like so:
<?php
$posted = array();
if (! empty($_POST)) {
foreach ($_POST as $pk => $pv) {
if (! empty($k)) {
$posted[$pk] = $pv;
}
}
}
?>
Because, $_POST is itself an array. And it has keys and values.
If a form element is posted, we get it by $_POST['varName'] means,
We are accessing the key varname of $_POST
Also, we are checking that its not empty. So only those variables will be extracted which are posted.
<?php
echo '<pre>';
print_r($posted);
echo '</pre>';
?>
<?php
$my_array = array("hello","world","howareu");
$c = count($my_array);
for($i=0;$i<=$c;$i++){
$v = '$var'.$i;
$splited = list($v) = $my_array;
}
?>
input:
$my_array
But expected output:
if I echo $var0, $var1, $var2;
hello, world, howareu
How to create dynamic PHP variables based upon the array count and then convert them into a list as a string?
You do not need list for that. $$ will suit you perfectly.
$my_array = array("hello", "world", "howareu");
foreach ($my_array as $key => $val)
{
$a = 'var'.$key;
$$a = $val;
}
echo $var0,", ", $var1,", " $var2;
Take a look here - Variable variables
Added:
or if you need count and for
for ($i = 0; $i < count($my_array); $i++)
{
$a = 'var'.$i;
$$a = $my_array[$i];
}
echo $var0,", ", $var1,", " $var2;
Of course, this line echo $var0,", ", $var1,", " $var2; sucks and looks like crap :) But in order to receive EXACTLY what you want, you need to modify variables, output like I've wrote, or use some function like implode with grue ', '.
Updated:
But if you need just that output, why not to use simple implode(', ', $my_array) :)
it's a matter of the data you need to process...if it's pretty static, you don't need the second foreach() for example, since you compare the keys anyways...
foreach($datavalueas $resultdatakey=>$resultdatavalue){
if($resultdatakey== 'A'){
//stuff for a
}
if($resultdatakey== 'B'){
//stuff for b
}
}
would become
if(isset($datavalueas['A'])){
//stuff for a
}
if(isset($datavalueas['B'])){
//stuff for b
}
since the foreach uses copies of the array, which are pretty bad for the performance...
Assuming i got your question right, you could use something like:
$array = array( 'x', 'y', 'z' );
foreach ($array as $name )
$$name = rand(1,100);
var_dump($x);
the $$ is key here, the first $ implies the variable as the second $ is used as the identifier for the variable. In this case the value being iterated over in the array. Giving us 3 variables: $x, $y, $z.
-- edit:
the correct code, besides using extract():
<?php
$my_array = array("hello","world","howareu");
$c = count($my_array);
for($i=0;$i < $c;$i++){
$v = 'var'.$i;
$$v = $my_array[$i];
}
echo "$var0, $var1, $var2";
?>
You can create dynamic variables via variables variable as Mr.kovpack have stated here. In below code you can access the variables from 0 to $c-1(count of array) as per your comment to Mr.kovpack.
$my_array = array("hello","world","howareu");
$c = count($my_array);
for($i=0;$i<=$c-1;$i++){
${'var'.$i} = $my_array[$i]; //Dynamic variable creation
// $splited = list($v) = $my_array;
}
echo $var0.$var1.$var2;
or you could use like below:
$my_array = array("hello","world","howareu");
$c = count($my_array);
for($i=0;$i<=$c-1;$i++){
$a='var'.$i;
$$a = $my_array[$i];
}
echo $var0."-".$var1."-".$var2;
You can read more on it here
<?php
$dog[] = "12";
$dog[] = "3";
for ($i = 0; $i < 2; $i++) {
$dig = $dog[i];
echo $dig;
}
?>
$dig is always null. Why?
i is not a variable, use $i
If you had error_reporting(E_ALL) on, as you should when in development, you would have caught it immediately (undefined constant).
$dig = $dog[i];
should be:
$dig = $dog[$i];
Easy. You want $dog[$i]. The PHP engine looks for a constant name i, can't find one, so resorts to looking for string. No a key with value 'i' either, so returns NULL.
your missing the $ in this line
$dig = $dog[i];
should be
$dig = $dog[$i];
you could also simplify this code by writing it this way
<?php
$dogs[] = "12";
$dogs[] = "3";
foreach($dogs as $dog) {
echo $dog;
}
?>
You want
$dig = $dog[$i];
You missed the $
At first glance I think you can get what I'm trying to do. I want to loop though variables with the same name but with a numerical prefix. I also had some confusion about the kind of loop I should use, not sure if a "for" loop would work. The only thing is I can't wrap my head around how php could interpret "on the fly" or fabricated variable. Ran into some trouble with outputting a string with a dollar sign as well. Thanks in advance!
$hello1 = "hello1";
$hello2 = "hello2";
$hello3 = "hello3";
$hello4 = "hello4";
$hello5 = "hello5";
$hello6 = "hello6";
$hello7 = "hello7";
$hello8 = "hello8";
$hello9 = "hello9";
$hello10 = "hello10";
for ( $counter = 1; $counter <= 10; $counter += 1) {
echo $hello . $counter . "<br>";
}
It's generally frowned upon, since it makes code much harder to read and follow, but you can actually use one variable's value as another variable's name:
$foo = "bar";
$baz = "foo";
echo $$baz; // will print "bar"
$foofoo = "qux";
echo ${$baz . 'foo'}; // will print "qux"
For more info, see the PHP documentation on variable Variables.
However, as I already mentioned, this can lead to some very difficult-to-read code. Are you sure that you couldn't just use an array instead?
$hello = array(
"hello1",
"hello2",
// ... etc
);
foreach($hello as $item) {
echo $item . "<br>";
}
Try ${"hello" . $counter}
$a = "hell";
$b = "o";
$hello = "world";
echo ${$a . $b};
// output: world
You can use variable variables as:
for ( $counter = 1; $counter <= 10; $counter += 1) {
echo ${'hello' . $counter } , '<br>';
}
as I guess u not even need to declare $hello1 = "hello1". coz the $counter is incrementing the numbers by its loop.
<?php
for ( $counter = 1; $counter <= 10; $counter += 1) {
echo 'hello' . $counter . "\n";
}
?>
so this is enough to get the output as you want.
the output will be:-
hello1
hello2
hello3
hello4
hello5
hello6
hello7
etc...
So i want to deo something like this and not sure how
for($s=0; $s < 5; $s++ ){
$pre_config_query = "select * from preconfig where code = '{$industry_string}_{$s}_{$class_string}'";
$pre_config_station = mysql_query($pre_config_query);
$it_exists = mysql_num_rows($pre_config_station);
if($it_exists>0){
$pre_config = mysql_fetch_assoc($pre_config_station);
$pre{$s} = $pre_config['id'];
I want the end product to have these 5 variables named
print $pre1;
print $pre2;
print $pre3;
print $pre4;
print $pre5;
That have the $pre_config['id'] if present....any ideas
You can use variable variables to accomplish that.
First, define a variable with the desired name:
$varname = "pre$s";
Second, assign a value to it:
$$varname = $pre_config['id'];
That's all!
this works but I'm not sure I'm answering your question.
<?php
for($s=1; $s < 6; $s++ ){
$it_exists=1;
if($it_exists > 0){
$pre_config = array('id'=>rand(10,99));
${"pre".$s} = $pre_config['id'];
}
}
echo $pre1."<br/>";
echo $pre2."<br/>";
echo $pre3."<br/>";
echo $pre4."<br/>";
echo $pre5."<br/>";
?>