PHP in_array voor $ _POST

Ik hoop dat dit geen vage vraag is, maar hier gaat het.

Ik wil de waarden doorlopen die zijn opgeslagen in de textfield_array en zien of ze overeenkomen met de sleutels in de array $ _ POST . Als ze dat doen, wil ik ze toewijzen aan de array an_array .

Het lijkt erop dat er geen wedstrijden zijn, hoewel ik weet dat er zou moeten zijn! Hier is mijn code:

<?php
$an_array = array();

$textfield_array = array(
 'item_no', 'button_text', 'text_field', 'drop_down_title'
);

foreach( $textfield_array as $textfield ){
  if( in_array( $textfield, $_POST ) ){
    $an_array[$textfield] = $_POST[$textfield];
  }
}
?>

Ben ik gek? Of begrijpt u niet hoe de $ _ POST -array werkt ?!

1
Probeer var_dump ($ _ POST) .
toegevoegd de auteur str, de bron
$ _POST is een array zoals anderen.
toegevoegd de auteur Dmitry Teplyakov, de bron

2 antwoord

U begrijpt verkeerd hoe in_array werkt. in_array controleert de waarden. U wilt de sleutels controleren.

U kunt isset gebruiken, of u kunt array_key_exists gebruiken (geeft waar als item bestaat met de waarde null ).

foreach ($textfield_array as $textfield) {
    if (isset($_POST[$textfield])) {
        $an_array[$textfield] = $_POST[$textfield];
    }
}
6
toegevoegd
Bedankt daarvoor. Ik heb inderdaad verkeerd begrepen hoe in -array werkt! Bedankt dat je me recht hebt gezet! R
toegevoegd de auteur Richard Sweeney, de bron

Gebruik de functie array_intersect .

$an_array = array_intersect(array_keys($_POST), $textfield_array);
1
toegevoegd
Hierdoor wordt een array met sleutels gemaakt, niet een associatieve array zoals het OP aanvankelijk vroeg. Probeer array_intersect_key ($ _ POST, array_flip ($ textfield_array))
toegevoegd de auteur Casey Chu, de bron