Jump to content

Why does this nested foreach not work


mo

Recommended Posts

I have 2 arrays. The first is the key group and the second is the subgroup.

 

I am basically trying to loop at key group than at sub-group where sub-group name (array name) = current key group.

 

foreach($_POST['OptionGroups'] as $Gval => $Gvalue) {

 

  foreach($Gvalue as $val => $value) {

 

  }

}

 

$Gvalue contains the name of my second arry but I get error "Warning: Invalid argument supplied for foreach() in ..." on the second foreach loop.

Link to comment
Share on other sites

foreach($_POST['OptionGroups'] as $Gval => $Gvalue) {

  if (is_array($Gvalue)) {
       foreach($Gvalue as $val => $value) {
             
      }
  }
}

 

Given that post data can be somewhat un-reliable. I would add an is_array check. I would also make sure that your form posts a multi-dimm array. My bet is it does not.

Link to comment
Share on other sites

Array OptionGroups prints fine but it's the second foreach. If I specify the name of the second foreach's array explicitly, it works. However I want the second foreach to be dynamic.

 

Array definitions:

Main Group

<input type=\"hidden\" name=\"OptionGroups[]\" value=\"".$ArrayRow['option_type']."\">

 

Sub Group

<input type=\"radio\" name=\"".$OptGroupName."[]\" value=\"$OptAttrArray\"></td>

Link to comment
Share on other sites

or get rid of the hidden input and use a two level array:

<input type=\"radio\" name=\"OptionGroups[".$OptGroupName."][]\" value=\"$OptAttrArray\"></td>

 

then you can use your original PHP:

foreach($_POST['OptionGroups'] as $Gval => $Gvalue) {
  foreach($Gvalue as $val => $value) {

  }
}

Link to comment
Share on other sites

The below worked. Don't know why I didn't think of it.

 

foreach($_POST['OptionGroups'] as $Gval => $Gvalue) {

  foreach($_POST[$Gvalue] as $val => $value) {

           

  }

}

 

Now when I echo $value, I get the word Array printed to the screen and not the value and if I use $value[0][0] I get an error.

Link to comment
Share on other sites

The below worked. Don't know why I didn't think of it.

 

foreach($_POST['OptionGroups'] as $Gval => $Gvalue) {

   foreach($_POST[$Gvalue] as $val => $value) {

            

   }

}

 

Now when I echo $value, I get the word Array printed to the screen and not the value and if I use $value[0][0] I get an error.

 

Do a print_r on that value and see what the index should be.

Link to comment
Share on other sites

looking at it...the value won't ever be an array since they are radio buttons, so change this:

<input type=\"radio\" name=\"".$OptGroupName."[]\" value=\"$OptAttrArray\"></td>

to

<input type=\"radio\" name=\"".$OptGroupName."\" value=\"$OptAttrArray\"></td>

Link to comment
Share on other sites

while($ArrayRow = mysql_fetch_array($sqlStr)) {

 

......

 

//Build array of option attributes

$OptAttrArray = array( array($strOptId,$strPrice,$strIsOption,$strBtype,$strMaxOptions) );

 

 

<input type=\"hidden\" name=\"OptionGroups[]\" value=\"".$ArrayRow['option_type']."\">

 

echo "<tr><td class=\"dataListItem\"><input type=\"radio\" name=\"".$OptGroupName."\" value=\"$OptAttrArray\"></td><tr>";

 

 

foreach($_POST['OptionGroups'] as $Gval => $Gvalue) {

  foreach($_POST[$Gvalue] as $val => $value) {

 

  }

}

 

 

}

Error = Warning: Invalid argument supplied for foreach() in....line 66.

Link to comment
Share on other sites

the code doesn't really make sense

 

-$OptAttrArray is supposed to be an array of what?

-is there more then one radio button for each option group?

 

...forget the foreach($_POST) stuff for now...the part that builds the form needs some work first

Link to comment
Share on other sites

rhodesa,

 

I thought about that after I posted my last reply. I was trying to build and array with various columns w/o building a multidimensional array.

 

I just changed my code to have $OptAttrArray just contain a string of concatenated values and I will just parse out the values later during form processing.

 

Thanks. This is resolved for now.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.