iamjonesy
iamjonesy

Reputation: 25122

PHP: help with array structure

My last question helped me get data from a form into an array. The array is fairly different in structure to anything I've used before. I have multiple records with a textbox and checkbox each. Here is the form data:

array(4) { 
["product"]=> array(4) { 
    [0]=> string(5) "Dummy" 
    [1]=> string(7) "Dummy 2" 
    [2]=> string(7) "Dummy 3" 
    [3]=> string(7) "Dummy 4" 
} 
["tags"]=> array(4) { 
    [0]=> string(25) "#enter, #product, #hastag" 
    [1]=> string(0) "" 
    [2]=> string(25) "#enter, #product, #hastag" 
    [3]=> string(25) "#enter, #product, #hastag" 
} 
["chk"]=> array(2) { 
    [0]=> string(2) "on" 
    [2]=> string(2) "on" 
} 
["submit"]=> string(5) "tweet" 

} 

I want to get the data from this array into a form such as (only if chk = "on"):

tweet[0]["product"] = "dummy"
tweet[0]["tag"] = "hash tag list here"

tweet[1]["product"] = "dummy3"
tweet[1]["tag"] = "hash tag list here"

Any help most appreciated! :)

Upvotes: 0

Views: 915

Answers (4)

Ben
Ben

Reputation: 62366

First I'd recommend using 1 instead of on. You should try to use numerical values whenever possible as they require less processing. I think you need to readjust your HTML, so you don't do any processing on the PHP side at all...

<input type="checkbox" name="tweet[(YOUR_TWEET_ID)][product]" value="PRODUCT_NAME"/>
<input type="text" name="tweet[(YOUR_TWEET_ID)][tags]" value=""/>

This will cause the form to $_POST exactly how you want it without any additional code.

update

foreach ($_POST['tweet'] as $tweetId => $value) {
   //again, it'd be a good idea to use a numerical value here
   if (strlen($value['product']) > 0) {
      //this tweet was checked, lets do with it what we need

      //here's how you'd get the tags
      echo $_POST['tweet'][$tweetId]['tags'];
   }
}

Upvotes: 4

Tyler Carter
Tyler Carter

Reputation: 61557

$finalArray = array();
foreach($array['product'] as $key => $name){
    if(!empty($array['chk'][$key])){
        $finalArray[] = array(
            "product" => $name,
            "tag" => $array['tags'][$key]);
    };
}

Upvotes: 2

Mikhail
Mikhail

Reputation: 9007

foreach ($records['chk'] as $id => $temp) {
  $tweet[$id]['product'] = $records['product'][$id];
  $tweet[$id]['tag'] = $records['tags'][$id];
}

Upvotes: 1

Jim
Jim

Reputation: 18853

Pretty simple:

$i=0;
foreach ($array['chk'] as $key => $val) {
     if ($val == "on") {
         $new_array[$i]['product'] = $array['product'][$key]; 
         $new_array[$i++]['tags'] = $array['tags'][$key];
     }
}

print_r($new_array);

Should do it, there are other ways, this is just one of them.

Upvotes: 1

Related Questions