2010-11-19 14 views
0

Meine letzte Frage half mir, Daten aus einem Formular in ein Array zu bekommen. Das Array ist in der Struktur ziemlich anders als alles, was ich vorher benutzt habe. Ich habe mehrere Datensätze mit einem Textfeld und Kontrollkästchen jeweils. Hier ist die Formulardaten:PHP: Hilfe mit Array-Struktur

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" 

} 

Ich möchte die Daten aus diesem Array in eine Form erhalten, wie (nur wenn chk = "on"):

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

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

Jede mögliche Hilfe geschätzt! :)

+0

Durch Ihre HTML-Einstellung die gewünschte '$ _POST' Format für ... sehen meine unten Antwort Sie suchen – Webnet

Antwort

4

Zuerst würde ich 1 statt on Verwendung empfehlen. Sie sollten versuchen, wann immer möglich numerische Werte zu verwenden, da sie weniger Verarbeitung benötigen. Ich glaube, Sie müssen Ihre HTML neu zu justieren, so dass Sie auf der PHP-Seite überhaupt eine Verarbeitung nicht tun ...

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

Dies wird die Form zu $ ​​_POST genau verursachen, wie Sie es ohne zusätzlichen Code wollen .

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

Wenn Sie nicht auf das Kontrollkästchen klicken, sind die Tags weiterhin vorhanden. Ich denke nicht, dass das passieren soll. –

+0

Ich aktualisierte es, um zu zeigen, wie Sie diesen Code auf der PHP-Seite verwenden würden – Webnet

+0

das funktioniert! Danke @Webnet – iamjonesy

1

Ganz einfach:

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

es tun soll, gibt es andere Möglichkeiten, das ist nur einer von ihnen.

+0

' i ++ $ bekommen kann 'ist nicht korrekt. –

+0

@Felix Warum nicht? Es iteriert nur auf dem zweiten, und da es '$ i ++' ist, wird es nur iterieren, nachdem es gedruckt hat, was '$ i' war. –

+1

@Brad das '$ i ++' ist verwirrend, wenn es so verwendet wird. Es wäre wahrscheinlich besser, sie nur zur besseren Übersichtlichkeit zu erhöhen oder einfach die '[]' mit einem ganzen Array zu verwenden (siehe meine Antwort). –

1
foreach ($records['chk'] as $id => $temp) { 
    $tweet[$id]['product'] = $records['product'][$id]; 
    $tweet[$id]['tag'] = $records['tags'][$id]; 
} 
2
$finalArray = array(); 
foreach($array['product'] as $key => $name){ 
    if(!empty($array['chk'][$key])){ 
     $finalArray[] = array(
      "product" => $name, 
      "tag" => $array['tags'][$key]); 
    }; 
} 
+0

Wie die Anordnung der Array-Struktur, +1. –