PHP:有关数组结构的帮助

时间:2010-11-19 15:02:02

标签: php arrays multidimensional-array

我的上一个问题帮助我将表单中的数据转换为数组。该阵列的结构与我之前使用的任何东西都有很大的不同。我有多个记录,每个记录都有一个文本框和复选框。这是表单数据:

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" 

} 

我希望将此数组中的数据转换为一种形式,例如(仅当chk =“on”)时:

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

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

最值得赞赏的任何帮助! :)

4 个答案:

答案 0 :(得分:4)

首先,我建议使用1代替on。您应该尽可能使用数值,因为它们需要较少的处理。我认为你需要重新调整你的HTML,所以你根本不在PHP方面进行任何处理......

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

如果没有任何其他代码,这将使表单以$ _POST完全符合您的要求。

<强>更新

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'];
   }
}

答案 1 :(得分:2)

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

答案 2 :(得分:1)

非常简单:

$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);

应该这样做,还有其他方法,这只是其中之一。

答案 3 :(得分:1)

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