foreach in foreach of arrays in arrays

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander C

Sander C

08/11/2008 10:36:00
Quote Anchor link
Ik heb al zoekfunctie gebruikt, maar kan toch nergens over vinden.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
}


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
 
PHP hulp

PHP hulp

19/04/2024 17:33:14
 
Onbekend Onbekend

Onbekend Onbekend

08/11/2008 10:49:00
Quote Anchor link
Ik snap er niet veel van. Maar je kunt toch gewoon een foreach in een foreach gebruiken of heb ik dat nou?
 
Sander C

Sander C

08/11/2008 10:58:00
Quote Anchor link
Dat is nou de probleem. Ik heb al foreach in foreach gebruikt..maar die wordt alleen de laatste id's van elk foreach opgeslagen en niet alle benodigde velden.

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'


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
  }
}
Gewijzigd op 01/01/1970 01:00:00 door Sander C
 
Rens nvt

Rens nvt

08/11/2008 11:45:00
Quote Anchor link
Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
foreach ($_POST['aantallimit'] as $k => $limitid){
  foreach ($_POST['aantallimit'] as $l => $limitid){
?>

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.
 
Robert Deiman

Robert Deiman

08/11/2008 12:32:00
Quote Anchor link
Waarschijnlijk moet dat zo'n constructie worden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
foreach ($_POST['aantallimit'] as $k => $limitid){
  foreach ($_POST['aantallimit'][$k] as $l => $limitid){
?>


Zelf maak ik er liefst een recursieve functie van, bijvoorbeeld als hier een functie die de diepte van een array bepaald:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>
 
Sander C

Sander C

08/11/2008 20:20:00
Quote Anchor link
Bedankt..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
foreach ($_POST['aantallimit'] as $k => $limitid){
  foreach ($_POST['aantallimit'][$k] as $l => $limitid){
?>


heb ik net geprobeerd..krijg nu de foutmelding: Invalid argument supplied for foreach() op die 2e foreach.
 
Sander C

Sander C

10/11/2008 20:28:00
Quote Anchor link
Weet er niemand dan de oplossing..die probleem blijft nog steeds..
 
Robert Deiman

Robert Deiman

10/11/2008 20:38:00
Quote Anchor link
@Sander

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.
 
Sander C

Sander C

10/11/2008 21:35:00
Quote Anchor link
heb is_array() toegevoegd in de 2e foreach..werkt ook niet..

Heb je niet ergens een voorbeeld van goeie foreach waar ik ook mee uit voeten kan en zo nodig aanpassen.
 
Robert Deiman

Robert Deiman

10/11/2008 22:56:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

if (is_array($Array))
    foreach ($Array as $Key => $Value) {
      $DepthArray[]=ArrayDepth($Value,$DepthCount);
    }


?>


Zo gebruik je is_array, probeer dat eens toe te passen in je code ;)

(de 1e foreach komt daar dus buiten omheen te staan!!)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.