foreach in foreach of arrays in arrays
Ik wil namelijk een foreach of een arrays die in foreach / arrays zit updaten.
Voorbeeld:
- id1 | titel1 | beschrijving1
- id2 | titel2 | beschrijving2
------- id1 | titel1 | beschrijving1
------- id2 | titel2 | beschrijving2
- id3 | titel3 | beschrijving3
etc..
De updaten van eerste arrays werkt uitstekend, maar wil nu ook 2e arrays die in arrays zit ook kunnen updaten.
Ik heb in alle textveld een [$i] achter elk tekst geplaatst.
De code die ik ga gebruiken voor die arrays:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
foreach ($_POST['aantallimit'] as $k => $limitid){
$sportid = $_POST['sportid'][$k];
$textid = $_POST['textid'][$k];
$sql = "UPDATE $invultexttab SET text_sport_id='".$sportid."', aantallimit='".$limitid1."' WHERE text_id='".$textid."'";
// $query = mysql_query($sql);
echo $sql."<br>";
}
$sportid = $_POST['sportid'][$k];
$textid = $_POST['textid'][$k];
$sql = "UPDATE $invultexttab SET text_sport_id='".$sportid."', aantallimit='".$limitid1."' WHERE text_id='".$textid."'";
// $query = mysql_query($sql);
echo $sql."<br>";
}
Datzelfde code heb ik ook gebruikt voor 1e arrays wat het ook uitstekend werkt.
Iemand enig idee wat ik nog meer eraan moeten toevoegen?
Gewijzigd op 01/01/1970 01:00:00 door Sander C
Ik snap er niet veel van. Maar je kunt toch gewoon een foreach in een foreach gebruiken of heb ik dat nou?
Die foreach in foreach krijg ik als output:
Quote:
UPDATE invultext SET text_sport_id='22', aantallimit='15' WHERE text_id='46'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='31'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='56'
UPDATE invultext SET text_sport_id='22', aantallimit='15' WHERE text_id='46'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='31'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='56'
UPDATE invultext SET text_sport_id='22', aantallimit='15' WHERE text_id='46'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='31'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='56'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='31'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='56'
UPDATE invultext SET text_sport_id='22', aantallimit='15' WHERE text_id='46'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='31'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='56'
UPDATE invultext SET text_sport_id='22', aantallimit='15' WHERE text_id='46'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='31'
UPDATE invultext SET text_sport_id='10', aantallimit='15' WHERE text_id='56'
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
foreach ($_POST['aantallimit'] as $k => $limitid){
foreach ($_POST['aantallimit'] as $l => $limitid){
$sportid = $_POST['sportid'][$l];
$textid = $_POST['textid'][$l];
$sql = "UPDATE $invultexttab SET text_sport_id='".$sportid."', aantallimit='".$limitid."' WHERE text_id='".$textid."'";
// $query = mysql_query($sql);
echo $sql."<br>";
}
}
foreach ($_POST['aantallimit'] as $l => $limitid){
$sportid = $_POST['sportid'][$l];
$textid = $_POST['textid'][$l];
$sql = "UPDATE $invultexttab SET text_sport_id='".$sportid."', aantallimit='".$limitid."' WHERE text_id='".$textid."'";
// $query = mysql_query($sql);
echo $sql."<br>";
}
}
Gewijzigd op 01/01/1970 01:00:00 door Sander C
Code (php)
is niet handig...
Je gebruikt 2 loops om dezelfde waarde door te lopen, en slaat de key op in de variabele $k en in de variabele $l. Hiermee doorloop je dus niet 2 niveau's, maar alleen het eerste niveau.
Code (php)
Zelf maak ik er liefst een recursieve functie van, bijvoorbeeld als hier een functie die de diepte van een array bepaald:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
/**
* @author Robert Deiman
* @copyright 2008
* @param array $aArray Contains the array to get depth from
* @param integer $iDepth (used for calculation, do not change!)
* @param integer $iCountstart (used for calculation, do not change!)
*/
function ArrayDepth($Array,$DepthCount=-1) {
// Find maximum depth of an array
// Usage: int ArrayDepth( array $array )
// returns integer with max depth
// if Array is a string or an empty array it will return 0
$DepthArray=array(0);
$DepthCount++;
$Depth = 0;
if (is_array($Array))
foreach ($Array as $Key => $Value) {
$DepthArray[]=ArrayDepth($Value,$DepthCount);
}
else
return $DepthCount;
return max($DepthCount,max($DepthArray));
}
$aTocount = array(
"key1" => "waarde1" ,
"key2" => array(
"subkey1" => "subwaarde1",
"subkey2" => array(
"subsubkey1" => "subsubwaarde1",
"key2" => array(
"subkey1" => "subwaarde1",
"subkey2" => array(
"subsubkey1" => "subsubwaarde1"
)
)
)
)
);
echo ArrayDepth($aTocount);
?>
ini_set('display_errors', 1);
error_reporting(E_ALL);
/**
* @author Robert Deiman
* @copyright 2008
* @param array $aArray Contains the array to get depth from
* @param integer $iDepth (used for calculation, do not change!)
* @param integer $iCountstart (used for calculation, do not change!)
*/
function ArrayDepth($Array,$DepthCount=-1) {
// Find maximum depth of an array
// Usage: int ArrayDepth( array $array )
// returns integer with max depth
// if Array is a string or an empty array it will return 0
$DepthArray=array(0);
$DepthCount++;
$Depth = 0;
if (is_array($Array))
foreach ($Array as $Key => $Value) {
$DepthArray[]=ArrayDepth($Value,$DepthCount);
}
else
return $DepthCount;
return max($DepthCount,max($DepthArray));
}
$aTocount = array(
"key1" => "waarde1" ,
"key2" => array(
"subkey1" => "subwaarde1",
"subkey2" => array(
"subsubkey1" => "subsubwaarde1",
"key2" => array(
"subkey1" => "subwaarde1",
"subkey2" => array(
"subsubkey1" => "subsubwaarde1"
)
)
)
)
);
echo ArrayDepth($aTocount);
?>
Code (php)
heb ik net geprobeerd..krijg nu de foutmelding: Invalid argument supplied for foreach() op die 2e foreach.
Weet er niemand dan de oplossing..die probleem blijft nog steeds..
Niet alle items zijn 2 diep, dus dat betekend dat er voor de 2e foreach niet altijd een array mee wordt gegeven. dat gaat er fout, dus je moet nog controleren met is_array() of dat item wel een array is.
Heb je niet ergens een voorbeeld van goeie foreach waar ik ook mee uit voeten kan en zo nodig aanpassen.
Code (php)
Zo gebruik je is_array, probeer dat eens toe te passen in je code ;)
(de 1e foreach komt daar dus buiten omheen te staan!!)