I want to generate a selectbox using two arrays, one containing the country codes and another containing the country names.
This is an example:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
This method didn't work for me. Any suggestions?
foreach( $codes as $code and $names as $name ) { }
That is not valid.
You probably want something like this...
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Alternatively, it'd be much easier to make the codes the key of your $names array...
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
foreach operates on only one array at a time.
The way your array is structured, you can array_combine() them into an array of key-value pairs then foreach that single array:
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
Or as seen in the other answers, you can hardcode an associative array instead.
Use array_combine() to fuse the arrays together and iterate over the result.
$countries = array_combine($codes, $names);
array_map seems good for this too
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
array_map(function ($code, $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);
Other benefits are:
If one array is shorter than the other, the callback receive null values to fill in the gap.
You can use more than 2 arrays to iterate through.
Use an associative array:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name) {
//...
}
I believe that using an associative array is the most sensible approach as opposed to using array_combine() because once you have an associative array, you can simply use array_keys() or array_values() to get exactly the same array you had before.
This worked for me:
$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}
Your code like this is incorrect as foreach only for single array:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
Alternative, Change to this:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$count = 0;
foreach($codes as $code) {
echo '<option value="' . $code . '">' . $names[count] . '</option>';
$count++;
}
?>
Why not just consolidate into a multi-dimensional associative array? Seems like you are going about this wrong:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
becomes:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
You can use array_merge to combine two arrays and then iterate over them.
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
All fully tested
3 ways to create a dynamic dropdown from an array.
This will create a dropdown menu from an array and automatically assign its respective value.
Method #1 (Normal Array)
<?php
$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');
echo '<select name="countries">';
foreach($names AS $let=>$word){
echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
?>
Method #2 (Normal Array)
<select name="countries">
<?php
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>
</select>
Method #3 (Associative Array)
<?php
$my_array = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France'
);
echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>
Walk it out...
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
PHP 5.3+
array_walk($codes, function ($code,$key) use ($names) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
});
Before PHP 5.3
array_walk($codes, function ($code,$key,$names){
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
},$names);
or combine
array_walk(array_combine($codes,$names), function ($name,$code){
echo '<option value="' . $code . '">' . $name . '</option>';
})
in select
array_walk(array_combine($codes,$names), function ($name,$code){
#$opts = '<option value="' . $code . '">' . $name . '</option>';
})
echo "<select>$opts</select>";
demo
<?php
$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');
echo '<table>';
foreach(array_keys($codes) as $i) {
echo '<tr><td>';
echo ($i + 1);
echo '</td><td>';
echo $codes[$i];
echo '</td><td>';
echo $names[$i];
echo '</td></tr>';
}
echo '</table>';
?>
foreach only works with a single array. To step through multiple arrays, it's better to use the each() function in a while loop:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each() returns information about the current key and value of the array and increments the internal pointer by one, or returns false if it has reached the end of the array. This code would not be dependent upon the two arrays having identical keys or having the same sort of elements. The loop terminates when one of the two arrays is finished.
Instead of foreach loop, try this (only when your arrays have same length).
$number = COUNT($_POST["codes "]);//count how many arrays available
if($number > 0)
{
for($i=0; $i<$number; $i++)//loop thru each arrays
{
$codes =$_POST['codes'][$i];
$names =$_POST['names'][$i];
//ur code in here
}
}
array_combine() worked great for me while combining $_POST multiple values from multiple form inputs in an attempt to update products quantities in a shopping cart.
I think that you can do something like:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
It should also work for associative arrays.
I think the simplest way is just to use the for loop this way:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
for($i = 0; $i < sizeof($codes); $i++){
echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}
if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}
foreach($doors as $a => $b){
Now you can use $a for each array....
$doors[$a]
$windows[$a]
....
}
I solved a problem like yours by this way:
foreach(array_keys($idarr) as $i) {
echo "Student ID: ".$idarr[$i]."<br />";
echo "Present: ".$presentarr[$i]."<br />";
echo "Reason: ".$reasonarr[$i]."<br />";
echo "Mark: ".$markarr[$i]."<br />";
}
You should try this for the putting 2 array in singlr foreach loop
Suppose i have 2 Array
1.$item_nm
2.$item_qty
`<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td> <td>item_qty</td> </tr>
#foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr>
<td> $i++ </td>
<td> $item_nm </td>
<td> $item_qty </td>
</tr></table>
#endforeach `
Few arrays can also be iterated like this:
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other arrays
$val3 = $array3[$key];
$result[] = array( //Save result in third array
'id' => $val,
'quant' => $val2,
'name' => $val3,
);
}
This will only work if the both array have same count.I try in laravel, for inserting both array in mysql db
$answer = {"0":"0","1":"1","2":"0","3":"0","4":"1"};
$reason_id = {"0":"17","1":"19","2":"15","3":"19","4":"18"};
$k= (array)json_decode($answer);
$x =(array)json_decode($reason_id);
$number = COUNT(json_decode($reason_id, true));
if($number > 0)
{
for($i=0; $i<$number; $i++)
{
$val = new ModelName();
$val->reason_id = $x[$i];
$val->answer =$k[$i];
$val->save();
}
}
En laravel Livewire
return view('you_name_view', compact('data','data2'));
#foreach ($data as $index => $data )
<li>
<span>{{$data}}</span>
<span>{{$data2[$index]}}</span>
</li>
#endforeach
it works for me
$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}
Related
I want to generate a selectbox using two arrays, one containing the country codes and another containing the country names.
This is an example:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
This method didn't work for me. Any suggestions?
foreach( $codes as $code and $names as $name ) { }
That is not valid.
You probably want something like this...
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Alternatively, it'd be much easier to make the codes the key of your $names array...
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
foreach operates on only one array at a time.
The way your array is structured, you can array_combine() them into an array of key-value pairs then foreach that single array:
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
Or as seen in the other answers, you can hardcode an associative array instead.
Use array_combine() to fuse the arrays together and iterate over the result.
$countries = array_combine($codes, $names);
array_map seems good for this too
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
array_map(function ($code, $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);
Other benefits are:
If one array is shorter than the other, the callback receive null values to fill in the gap.
You can use more than 2 arrays to iterate through.
Use an associative array:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name) {
//...
}
I believe that using an associative array is the most sensible approach as opposed to using array_combine() because once you have an associative array, you can simply use array_keys() or array_values() to get exactly the same array you had before.
This worked for me:
$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}
Your code like this is incorrect as foreach only for single array:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
Alternative, Change to this:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$count = 0;
foreach($codes as $code) {
echo '<option value="' . $code . '">' . $names[count] . '</option>';
$count++;
}
?>
Why not just consolidate into a multi-dimensional associative array? Seems like you are going about this wrong:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
becomes:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
You can use array_merge to combine two arrays and then iterate over them.
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
All fully tested
3 ways to create a dynamic dropdown from an array.
This will create a dropdown menu from an array and automatically assign its respective value.
Method #1 (Normal Array)
<?php
$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');
echo '<select name="countries">';
foreach($names AS $let=>$word){
echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
?>
Method #2 (Normal Array)
<select name="countries">
<?php
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>
</select>
Method #3 (Associative Array)
<?php
$my_array = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France'
);
echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>
Walk it out...
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
PHP 5.3+
array_walk($codes, function ($code,$key) use ($names) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
});
Before PHP 5.3
array_walk($codes, function ($code,$key,$names){
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
},$names);
or combine
array_walk(array_combine($codes,$names), function ($name,$code){
echo '<option value="' . $code . '">' . $name . '</option>';
})
in select
array_walk(array_combine($codes,$names), function ($name,$code){
#$opts = '<option value="' . $code . '">' . $name . '</option>';
})
echo "<select>$opts</select>";
demo
<?php
$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');
echo '<table>';
foreach(array_keys($codes) as $i) {
echo '<tr><td>';
echo ($i + 1);
echo '</td><td>';
echo $codes[$i];
echo '</td><td>';
echo $names[$i];
echo '</td></tr>';
}
echo '</table>';
?>
foreach only works with a single array. To step through multiple arrays, it's better to use the each() function in a while loop:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each() returns information about the current key and value of the array and increments the internal pointer by one, or returns false if it has reached the end of the array. This code would not be dependent upon the two arrays having identical keys or having the same sort of elements. The loop terminates when one of the two arrays is finished.
Instead of foreach loop, try this (only when your arrays have same length).
$number = COUNT($_POST["codes "]);//count how many arrays available
if($number > 0)
{
for($i=0; $i<$number; $i++)//loop thru each arrays
{
$codes =$_POST['codes'][$i];
$names =$_POST['names'][$i];
//ur code in here
}
}
array_combine() worked great for me while combining $_POST multiple values from multiple form inputs in an attempt to update products quantities in a shopping cart.
I think that you can do something like:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
It should also work for associative arrays.
I think the simplest way is just to use the for loop this way:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
for($i = 0; $i < sizeof($codes); $i++){
echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}
if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}
foreach($doors as $a => $b){
Now you can use $a for each array....
$doors[$a]
$windows[$a]
....
}
I solved a problem like yours by this way:
foreach(array_keys($idarr) as $i) {
echo "Student ID: ".$idarr[$i]."<br />";
echo "Present: ".$presentarr[$i]."<br />";
echo "Reason: ".$reasonarr[$i]."<br />";
echo "Mark: ".$markarr[$i]."<br />";
}
You should try this for the putting 2 array in singlr foreach loop
Suppose i have 2 Array
1.$item_nm
2.$item_qty
`<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td> <td>item_qty</td> </tr>
#foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr>
<td> $i++ </td>
<td> $item_nm </td>
<td> $item_qty </td>
</tr></table>
#endforeach `
Few arrays can also be iterated like this:
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other arrays
$val3 = $array3[$key];
$result[] = array( //Save result in third array
'id' => $val,
'quant' => $val2,
'name' => $val3,
);
}
This will only work if the both array have same count.I try in laravel, for inserting both array in mysql db
$answer = {"0":"0","1":"1","2":"0","3":"0","4":"1"};
$reason_id = {"0":"17","1":"19","2":"15","3":"19","4":"18"};
$k= (array)json_decode($answer);
$x =(array)json_decode($reason_id);
$number = COUNT(json_decode($reason_id, true));
if($number > 0)
{
for($i=0; $i<$number; $i++)
{
$val = new ModelName();
$val->reason_id = $x[$i];
$val->answer =$k[$i];
$val->save();
}
}
En laravel Livewire
return view('you_name_view', compact('data','data2'));
#foreach ($data as $index => $data )
<li>
<span>{{$data}}</span>
<span>{{$data2[$index]}}</span>
</li>
#endforeach
it works for me
$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}
I want to generate a selectbox using two arrays, one containing the country codes and another containing the country names.
This is an example:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
This method didn't work for me. Any suggestions?
foreach( $codes as $code and $names as $name ) { }
That is not valid.
You probably want something like this...
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Alternatively, it'd be much easier to make the codes the key of your $names array...
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
foreach operates on only one array at a time.
The way your array is structured, you can array_combine() them into an array of key-value pairs then foreach that single array:
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
Or as seen in the other answers, you can hardcode an associative array instead.
Use array_combine() to fuse the arrays together and iterate over the result.
$countries = array_combine($codes, $names);
array_map seems good for this too
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
array_map(function ($code, $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);
Other benefits are:
If one array is shorter than the other, the callback receive null values to fill in the gap.
You can use more than 2 arrays to iterate through.
Use an associative array:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name) {
//...
}
I believe that using an associative array is the most sensible approach as opposed to using array_combine() because once you have an associative array, you can simply use array_keys() or array_values() to get exactly the same array you had before.
This worked for me:
$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}
Your code like this is incorrect as foreach only for single array:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
Alternative, Change to this:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$count = 0;
foreach($codes as $code) {
echo '<option value="' . $code . '">' . $names[count] . '</option>';
$count++;
}
?>
Why not just consolidate into a multi-dimensional associative array? Seems like you are going about this wrong:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
becomes:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
You can use array_merge to combine two arrays and then iterate over them.
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
All fully tested
3 ways to create a dynamic dropdown from an array.
This will create a dropdown menu from an array and automatically assign its respective value.
Method #1 (Normal Array)
<?php
$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');
echo '<select name="countries">';
foreach($names AS $let=>$word){
echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
?>
Method #2 (Normal Array)
<select name="countries">
<?php
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>
</select>
Method #3 (Associative Array)
<?php
$my_array = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France'
);
echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>
Walk it out...
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
PHP 5.3+
array_walk($codes, function ($code,$key) use ($names) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
});
Before PHP 5.3
array_walk($codes, function ($code,$key,$names){
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
},$names);
or combine
array_walk(array_combine($codes,$names), function ($name,$code){
echo '<option value="' . $code . '">' . $name . '</option>';
})
in select
array_walk(array_combine($codes,$names), function ($name,$code){
#$opts = '<option value="' . $code . '">' . $name . '</option>';
})
echo "<select>$opts</select>";
demo
<?php
$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');
echo '<table>';
foreach(array_keys($codes) as $i) {
echo '<tr><td>';
echo ($i + 1);
echo '</td><td>';
echo $codes[$i];
echo '</td><td>';
echo $names[$i];
echo '</td></tr>';
}
echo '</table>';
?>
foreach only works with a single array. To step through multiple arrays, it's better to use the each() function in a while loop:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each() returns information about the current key and value of the array and increments the internal pointer by one, or returns false if it has reached the end of the array. This code would not be dependent upon the two arrays having identical keys or having the same sort of elements. The loop terminates when one of the two arrays is finished.
Instead of foreach loop, try this (only when your arrays have same length).
$number = COUNT($_POST["codes "]);//count how many arrays available
if($number > 0)
{
for($i=0; $i<$number; $i++)//loop thru each arrays
{
$codes =$_POST['codes'][$i];
$names =$_POST['names'][$i];
//ur code in here
}
}
array_combine() worked great for me while combining $_POST multiple values from multiple form inputs in an attempt to update products quantities in a shopping cart.
I think that you can do something like:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
It should also work for associative arrays.
I think the simplest way is just to use the for loop this way:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
for($i = 0; $i < sizeof($codes); $i++){
echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}
if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}
foreach($doors as $a => $b){
Now you can use $a for each array....
$doors[$a]
$windows[$a]
....
}
I solved a problem like yours by this way:
foreach(array_keys($idarr) as $i) {
echo "Student ID: ".$idarr[$i]."<br />";
echo "Present: ".$presentarr[$i]."<br />";
echo "Reason: ".$reasonarr[$i]."<br />";
echo "Mark: ".$markarr[$i]."<br />";
}
You should try this for the putting 2 array in singlr foreach loop
Suppose i have 2 Array
1.$item_nm
2.$item_qty
`<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td> <td>item_qty</td> </tr>
#foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr>
<td> $i++ </td>
<td> $item_nm </td>
<td> $item_qty </td>
</tr></table>
#endforeach `
Few arrays can also be iterated like this:
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other arrays
$val3 = $array3[$key];
$result[] = array( //Save result in third array
'id' => $val,
'quant' => $val2,
'name' => $val3,
);
}
This will only work if the both array have same count.I try in laravel, for inserting both array in mysql db
$answer = {"0":"0","1":"1","2":"0","3":"0","4":"1"};
$reason_id = {"0":"17","1":"19","2":"15","3":"19","4":"18"};
$k= (array)json_decode($answer);
$x =(array)json_decode($reason_id);
$number = COUNT(json_decode($reason_id, true));
if($number > 0)
{
for($i=0; $i<$number; $i++)
{
$val = new ModelName();
$val->reason_id = $x[$i];
$val->answer =$k[$i];
$val->save();
}
}
En laravel Livewire
return view('you_name_view', compact('data','data2'));
#foreach ($data as $index => $data )
<li>
<span>{{$data}}</span>
<span>{{$data2[$index]}}</span>
</li>
#endforeach
it works for me
$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}
I want to generate a selectbox using two arrays, one containing the country codes and another containing the country names.
This is an example:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
This method didn't work for me. Any suggestions?
foreach( $codes as $code and $names as $name ) { }
That is not valid.
You probably want something like this...
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Alternatively, it'd be much easier to make the codes the key of your $names array...
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
foreach operates on only one array at a time.
The way your array is structured, you can array_combine() them into an array of key-value pairs then foreach that single array:
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
Or as seen in the other answers, you can hardcode an associative array instead.
Use array_combine() to fuse the arrays together and iterate over the result.
$countries = array_combine($codes, $names);
array_map seems good for this too
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
array_map(function ($code, $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);
Other benefits are:
If one array is shorter than the other, the callback receive null values to fill in the gap.
You can use more than 2 arrays to iterate through.
Use an associative array:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name) {
//...
}
I believe that using an associative array is the most sensible approach as opposed to using array_combine() because once you have an associative array, you can simply use array_keys() or array_values() to get exactly the same array you had before.
This worked for me:
$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}
Your code like this is incorrect as foreach only for single array:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
Alternative, Change to this:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$count = 0;
foreach($codes as $code) {
echo '<option value="' . $code . '">' . $names[count] . '</option>';
$count++;
}
?>
Why not just consolidate into a multi-dimensional associative array? Seems like you are going about this wrong:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
becomes:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
You can use array_merge to combine two arrays and then iterate over them.
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
All fully tested
3 ways to create a dynamic dropdown from an array.
This will create a dropdown menu from an array and automatically assign its respective value.
Method #1 (Normal Array)
<?php
$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');
echo '<select name="countries">';
foreach($names AS $let=>$word){
echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
?>
Method #2 (Normal Array)
<select name="countries">
<?php
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>
</select>
Method #3 (Associative Array)
<?php
$my_array = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France'
);
echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>
Walk it out...
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
PHP 5.3+
array_walk($codes, function ($code,$key) use ($names) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
});
Before PHP 5.3
array_walk($codes, function ($code,$key,$names){
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
},$names);
or combine
array_walk(array_combine($codes,$names), function ($name,$code){
echo '<option value="' . $code . '">' . $name . '</option>';
})
in select
array_walk(array_combine($codes,$names), function ($name,$code){
#$opts = '<option value="' . $code . '">' . $name . '</option>';
})
echo "<select>$opts</select>";
demo
<?php
$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');
echo '<table>';
foreach(array_keys($codes) as $i) {
echo '<tr><td>';
echo ($i + 1);
echo '</td><td>';
echo $codes[$i];
echo '</td><td>';
echo $names[$i];
echo '</td></tr>';
}
echo '</table>';
?>
foreach only works with a single array. To step through multiple arrays, it's better to use the each() function in a while loop:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each() returns information about the current key and value of the array and increments the internal pointer by one, or returns false if it has reached the end of the array. This code would not be dependent upon the two arrays having identical keys or having the same sort of elements. The loop terminates when one of the two arrays is finished.
Instead of foreach loop, try this (only when your arrays have same length).
$number = COUNT($_POST["codes "]);//count how many arrays available
if($number > 0)
{
for($i=0; $i<$number; $i++)//loop thru each arrays
{
$codes =$_POST['codes'][$i];
$names =$_POST['names'][$i];
//ur code in here
}
}
array_combine() worked great for me while combining $_POST multiple values from multiple form inputs in an attempt to update products quantities in a shopping cart.
I think that you can do something like:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
It should also work for associative arrays.
I think the simplest way is just to use the for loop this way:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
for($i = 0; $i < sizeof($codes); $i++){
echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}
if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}
foreach($doors as $a => $b){
Now you can use $a for each array....
$doors[$a]
$windows[$a]
....
}
I solved a problem like yours by this way:
foreach(array_keys($idarr) as $i) {
echo "Student ID: ".$idarr[$i]."<br />";
echo "Present: ".$presentarr[$i]."<br />";
echo "Reason: ".$reasonarr[$i]."<br />";
echo "Mark: ".$markarr[$i]."<br />";
}
You should try this for the putting 2 array in singlr foreach loop
Suppose i have 2 Array
1.$item_nm
2.$item_qty
`<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td> <td>item_qty</td> </tr>
#foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr>
<td> $i++ </td>
<td> $item_nm </td>
<td> $item_qty </td>
</tr></table>
#endforeach `
Few arrays can also be iterated like this:
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other arrays
$val3 = $array3[$key];
$result[] = array( //Save result in third array
'id' => $val,
'quant' => $val2,
'name' => $val3,
);
}
This will only work if the both array have same count.I try in laravel, for inserting both array in mysql db
$answer = {"0":"0","1":"1","2":"0","3":"0","4":"1"};
$reason_id = {"0":"17","1":"19","2":"15","3":"19","4":"18"};
$k= (array)json_decode($answer);
$x =(array)json_decode($reason_id);
$number = COUNT(json_decode($reason_id, true));
if($number > 0)
{
for($i=0; $i<$number; $i++)
{
$val = new ModelName();
$val->reason_id = $x[$i];
$val->answer =$k[$i];
$val->save();
}
}
En laravel Livewire
return view('you_name_view', compact('data','data2'));
#foreach ($data as $index => $data )
<li>
<span>{{$data}}</span>
<span>{{$data2[$index]}}</span>
</li>
#endforeach
it works for me
$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}
I want to generate a selectbox using two arrays, one containing the country codes and another containing the country names.
This is an example:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
This method didn't work for me. Any suggestions?
foreach( $codes as $code and $names as $name ) { }
That is not valid.
You probably want something like this...
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Alternatively, it'd be much easier to make the codes the key of your $names array...
$names = array(
'tn' => 'Tunisia',
'us' => 'United States',
...
);
foreach operates on only one array at a time.
The way your array is structured, you can array_combine() them into an array of key-value pairs then foreach that single array:
foreach (array_combine($codes, $names) as $code => $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
Or as seen in the other answers, you can hardcode an associative array instead.
Use array_combine() to fuse the arrays together and iterate over the result.
$countries = array_combine($codes, $names);
array_map seems good for this too
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
array_map(function ($code, $name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}, $codes, $names);
Other benefits are:
If one array is shorter than the other, the callback receive null values to fill in the gap.
You can use more than 2 arrays to iterate through.
Use an associative array:
$code_names = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France');
foreach($code_names as $code => $name) {
//...
}
I believe that using an associative array is the most sensible approach as opposed to using array_combine() because once you have an associative array, you can simply use array_keys() or array_values() to get exactly the same array you had before.
This worked for me:
$codes = array('tn', 'us', 'fr');
$names = array('Tunisia', 'United States', 'France');
foreach($codes as $key => $value) {
echo "Code is: " . $codes[$key] . " - " . "and Name: " . $names[$key] . "<br>";
}
Your code like this is incorrect as foreach only for single array:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
Alternative, Change to this:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$count = 0;
foreach($codes as $code) {
echo '<option value="' . $code . '">' . $names[count] . '</option>';
$count++;
}
?>
Why not just consolidate into a multi-dimensional associative array? Seems like you are going about this wrong:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
becomes:
$dropdown = array('tn' => 'Tunisia', 'us' => 'United States', 'fr' => 'France');
You can use array_merge to combine two arrays and then iterate over them.
$array1 = array("foo" => "bar");
$array2 = array("hello" => "world");
$both_arrays = array_merge((array)$array1, (array)$array2);
print_r($both_arrays);
All fully tested
3 ways to create a dynamic dropdown from an array.
This will create a dropdown menu from an array and automatically assign its respective value.
Method #1 (Normal Array)
<?php
$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');
echo '<select name="countries">';
foreach($names AS $let=>$word){
echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
?>
Method #2 (Normal Array)
<select name="countries">
<?php
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>
</select>
Method #3 (Associative Array)
<?php
$my_array = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France'
);
echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>
Walk it out...
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
PHP 5.3+
array_walk($codes, function ($code,$key) use ($names) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
});
Before PHP 5.3
array_walk($codes, function ($code,$key,$names){
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
},$names);
or combine
array_walk(array_combine($codes,$names), function ($name,$code){
echo '<option value="' . $code . '">' . $name . '</option>';
})
in select
array_walk(array_combine($codes,$names), function ($name,$code){
#$opts = '<option value="' . $code . '">' . $name . '</option>';
})
echo "<select>$opts</select>";
demo
<?php
$codes = array ('tn','us','fr');
$names = array ('Tunisia','United States','France');
echo '<table>';
foreach(array_keys($codes) as $i) {
echo '<tr><td>';
echo ($i + 1);
echo '</td><td>';
echo $codes[$i];
echo '</td><td>';
echo $names[$i];
echo '</td></tr>';
}
echo '</table>';
?>
foreach only works with a single array. To step through multiple arrays, it's better to use the each() function in a while loop:
while(($code = each($codes)) && ($name = each($names))) {
echo '<option value="' . $code['value'] . '">' . $name['value'] . '</option>';
}
each() returns information about the current key and value of the array and increments the internal pointer by one, or returns false if it has reached the end of the array. This code would not be dependent upon the two arrays having identical keys or having the same sort of elements. The loop terminates when one of the two arrays is finished.
Instead of foreach loop, try this (only when your arrays have same length).
$number = COUNT($_POST["codes "]);//count how many arrays available
if($number > 0)
{
for($i=0; $i<$number; $i++)//loop thru each arrays
{
$codes =$_POST['codes'][$i];
$names =$_POST['names'][$i];
//ur code in here
}
}
array_combine() worked great for me while combining $_POST multiple values from multiple form inputs in an attempt to update products quantities in a shopping cart.
I think that you can do something like:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach ($codes as $key => $code) {
echo '<option value="' . $code . '">' . $names[$key] . '</option>';
}
It should also work for associative arrays.
I think the simplest way is just to use the for loop this way:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
for($i = 0; $i < sizeof($codes); $i++){
echo '<option value="' . $codes[$i] . '">' . $names[$i] . '</option>';
}
if(isset($_POST['doors'])=== true){
$doors = $_POST['doors'];
}else{$doors = 0;}
if(isset($_POST['windows'])=== true){
$windows = $_POST['windows'];
}else{$windows = 0;}
foreach($doors as $a => $b){
Now you can use $a for each array....
$doors[$a]
$windows[$a]
....
}
I solved a problem like yours by this way:
foreach(array_keys($idarr) as $i) {
echo "Student ID: ".$idarr[$i]."<br />";
echo "Present: ".$presentarr[$i]."<br />";
echo "Reason: ".$reasonarr[$i]."<br />";
echo "Mark: ".$markarr[$i]."<br />";
}
You should try this for the putting 2 array in singlr foreach loop
Suppose i have 2 Array
1.$item_nm
2.$item_qty
`<?php $i=1; ?>
<table><tr><td>Sr.No</td> <td>item_nm</td> <td>item_qty</td> </tr>
#foreach (array_combine($item_nm, $item_qty) as $item_nm => $item_qty)
<tr>
<td> $i++ </td>
<td> $item_nm </td>
<td> $item_qty </td>
</tr></table>
#endforeach `
Few arrays can also be iterated like this:
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other arrays
$val3 = $array3[$key];
$result[] = array( //Save result in third array
'id' => $val,
'quant' => $val2,
'name' => $val3,
);
}
This will only work if the both array have same count.I try in laravel, for inserting both array in mysql db
$answer = {"0":"0","1":"1","2":"0","3":"0","4":"1"};
$reason_id = {"0":"17","1":"19","2":"15","3":"19","4":"18"};
$k= (array)json_decode($answer);
$x =(array)json_decode($reason_id);
$number = COUNT(json_decode($reason_id, true));
if($number > 0)
{
for($i=0; $i<$number; $i++)
{
$val = new ModelName();
$val->reason_id = $x[$i];
$val->answer =$k[$i];
$val->save();
}
}
En laravel Livewire
return view('you_name_view', compact('data','data2'));
#foreach ($data as $index => $data )
<li>
<span>{{$data}}</span>
<span>{{$data2[$index]}}</span>
</li>
#endforeach
it works for me
$counter = 0;
foreach($codes as $code)
{
$codes_array[$counter]=$code;
$counter++;
}
$counter = 0;
foreach($names as $name)
{
echo $codes_array[$counter]."and".$name;
$counter++;
}
This question already has answers here:
Two arrays in foreach loop
(24 answers)
Closed 9 years ago.
I want to generate a selectbox using two arrays, one containing the country codes and another containing the country names.
This is an example:
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
foreach( $codes as $code and $names as $name ) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
?>
This method didn't work for me. any suggestions?
Thanks
It has to be 2 arrays? is more easy if you just use an associative array.
like:
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $code=>$name) {
echo '<option value="' . $code . '">' . $name . '</option>';
}
if you already have those two arrays, you can combine them:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$countries = array_combine($codes, $names);
Here is a demo: http://codepad.org/nYjCk3uQ
if you are same size of array you can use like below
<?php
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$i=0
foreach( $names as $name ) {
echo '<option value="' . $codes [$i] . '">' . $name . '</option>';
$i = $i+1
}
?>
if both arrays are perfectly indexed then you can iterate one array alone
for($i=0; $i<count($codes);$i++) {
echo '<option value="' . $code[$i] . '">' . $name[$i] . '</option>';
}
This will only work if both the arrays are having matching indexes on their values
All fully tested
3 ways to create a dynamic dropdown from an array.
This will create a dropdown menu from an array and automatically assign its respective value.
Method #1 (Normal Array)
<?php
$names = array('tn'=>'Tunisia','us'=>'United States','fr'=>'France');
echo '<select name="countries">';
foreach($names AS $let=>$word){
echo '<option value="'.$let.'">'.$word.'</option>';
}
echo '</select>';
?>
Method #2 (Normal Array)
<select name="countries">
<?php
$countries = array('tn'=> "Tunisia", "us"=>'United States',"fr"=>'France');
foreach($countries as $select=>$country_name){
echo '<option value="' . $select . '">' . $country_name . '</option>';
}
?>
</select>
Method #3 (Associative Array)
<?php
$my_array = array(
'tn' => 'Tunisia',
'us' => 'United States',
'fr' => 'France'
);
echo '<select name="countries">';
echo '<option value="none">Select...</option>';
foreach ($my_array as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>';
}
echo '</select>';
?>
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}
Use the for loop for two arrays:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$i = 0;
$length = count($codes);
for($i;$i<$length;$i++) {
echo '<option value="' . $code[$i] . '">' . $name[$i] . '</option>';
}
This will work for you.
Another ways is here:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$newarr = array_combine($codes,$names);
foreach($newarr as $index => $value){
echo '<option value="' . $index . '">' . $value . '</option>';
}
I would approach it like:
$names = array('Tunisia' : 'tn','United States' :'us','France': 'fr');
foreach($names as $key=>$value) {
echo '<option value="' . $value . '">' . $key . '</option>';
}
Another way can be:
$codes = array('tn','us','fr');
$names = array('Tunisia','United States','France');
$count=0
foreach( $names as $name ) {
echo '<option value="' . $codes [$i] . '">' . $name . '</option>';
$count = $count + 1;
}
Try this
foreach( $codes as $index => $code ) {
echo '<option value="' . $code . '">' . $names[$index] . '</option>';
}