2016-06-03 11 views
0

Ich habe mich gefragt, ob noch eine Möglichkeit, Arrays in PHP zu filtern, so etwas wie dies über tun:Filtering-Arrays in PHP durch Parameter

if (!in_array("something",$something) 

Nun würde Ich mag alle Werte erhalten, die durch die nicht übereinstimmen Suchkriterium.

Zum Beispiel, wenn ich ein Array wie diese:

$options = array("Preview", "Live", "Completed"); 

und ich den Wert für die Suche übergeben: „Vorschau“, würde ich diese beiden Elemente in dem Array zurückkommen „Live“ und " Abgeschlossen "als Ergebnis meiner Array-Filterung ...

Gibt es einen Weg, wie ich das tun könnte?

Edit:

Wir haben eine erste Array wie folgt:

$options = array("Preview", "Live", "Completed"); 

Anfängliche Eingabe in die Suche von Array "Vorschau" string.

Output-Array, das Ich mag würde es sein soll:

$newArray = array("Live", "Completed"); 

EDIT EDIT (WAS IM TATSÄCHLICH ZU ERREICHEN TRYING):

Hallo Jungs das ist, was ich versuche tatsächlich zu tun :

<?php foreach($active_brand as $brand?> 
<select> 
          <?php if (in_array($brand['State'], $options)) { ?> 
           <option selected="selected" value="<?=$brand['id']?>"><?=$brand['State']?></option> 
          <?php }?> 
          <?php for($i=1;$i<count($options);$i++) { ?> 
           <option value="<?=$brand['id']?>"><?=array_diff($options, array($brand['State']))[$i]?></option> 
          <?php }?> 
         </select> 
<?php }?> 

Wie sie sehen können, habe ich eine Spalte in meiner DB habe, die einen „Staat“ genannt wird ... Es ist im Grunde ein varchar, wo ich meine Zeichenfolge halten gespeichert ... Marke Zustand kann das nur sein 3 folgende Zustände:

Preview => Live => Completed 

Das erste, was ich tun, um den aktuellen Wert gesetzt Liste auszuwählen wie folgt vor:

<?php if (in_array($brand['State'], $options)) { ?> 
            <option selected="selected" value="<?=$brand['id']?>"><?=$brand['State']?></option> 
           <?php }?> 

Jetzt habe ich ein Array wie dies in meinem phtml Datei wie folgt definiert:

$options = array("Preview", "Live", "Completed"); 

Jetzt versuche ich einfach, die Zustände herauszufiltern, die nicht im Array sind, und sie in meinem Auswahl-Tag wie folgt zu platzieren:

<?php for($i=1;$i<count($options);$i++) { ?> 
          <option value="<?=$brand['id']?>"><?=array_diff($options, array($brand['State']))[$i]?></option> 
         <?php }?> 

so dass die Struktur in meiner Auswahlliste ist wie folgt:

Aktueller Stand der Marke => defaultly ausgewählt => die beiden fehlenden Zustände hinzufügen Liste auszuwählen (aber nicht das aktuelle hinzuzufügen, die in gesetzt DB) ...

Kann mir jemand helfen?

+0

Können Sie bitte "Beispieleingabe" und "Beispielausgabe" hinzufügen? – Will

+0

Hallo Werde ich meine Frage bearbeitet, können Sie jetzt darüber nachdenken? – perkes456

+0

Bitte zeigen Sie uns, was Sie bereits versucht haben und was nicht funktioniert –

Antwort

2

können Sie verwenden array_diff:

$notIn = array_diff($options, array('Preview')); 

Schöne daran ist, dass Sie mit mehreren Werten filtern können, wenn Sie benötigen.

Update:

Ich denke, ein bisschen würde mehr klar sein, folgendes zu tun:

<?php foreach($active_brand as $brand) { ?> 
<select> 
    <?php foreach($options as $option) { ?> 
     <option <?php if($brand['State'] == $option) { ?>selected="selected"<?php } ?> value="<?=$brand['id']?>"><?php echo $option; ?></option> 
    <?php } ?> 
</select> 
<?php } ?> 
+0

Gibt es eine Möglichkeit, einen einzelnen Wert zu erhalten, der nicht durch das Suchkriterium übereinstimmt, während gleichzeitig eine for-Schleife ausgeführt wird? Das scheint eine wirklich gute Lösung zu sein. Ich vermisse nur, was ich hier geschrieben habe ... Könnte das gemacht werden? – perkes456

+0

Können Sie mehr Details geben, was Sie brauchen. Ich verstehe das nicht ganz. Aktualisieren Sie auch Ihre Frage mit dieser Information, da der obige Code genau das tut, was Sie beschrieben haben: $ options = array ("Preview", "Live", "Completed"); -> $ newArray = array ("Live", "Completed"); mit Suchkriterium "Preview" – xjmdoo

+0

Hi Ich habe meine Frage bearbeitet ... Kannst du bitte nachsehen? – perkes456

0

Versuchen:

function removeAllValuesMatching(array $arr, $value) { 
    $keys = array_keys($arr, $value); 
    foreach ($keys as $key) { 
     unset($arr[$key]); 
    } 
    return $arr; 
} 

$options = array("Preview", "Live", "Completed"); 

removeAllValuesMatching($options, "Preview"); // pass array and value to match 
0

können Sie verwenden array_filter()

$array = array('Preview', 'Live', 'Completed'); 
$blacklist = 'Preview'; 
$result = array_filter($array, function($value) use ($blacklist) { 
    if($value !== $blacklist){ 
     return $value; 
    } 
}); 
var_dump($result); 
exit; 

Sie können einstellen, Es kann also $ blacklist ein Array sein, wenn Sie müssen.