2013-11-20 11 views
9

Ich habe ein PHP-Array, das ich versuche in zwei verschiedene Arrays zu teilen. Ich versuche, alle Werte herauszuziehen, die das Wort "versteckt" enthalten. Ein Array würde also alle Werte enthalten, die das Wort "versteckt" nicht enthalten. Das andere Array würde alle Werte enthalten, die das Wort "versteckt" enthalten. Ich kann einfach nicht herausfinden, wie es geht.PHP Splitting Array in zwei Arrays basierend auf Wert

Das ursprüngliche Array stammt aus einem Formularpost, der Schlüssel und Werte aus einer Reihe von Kontrollkästchen und ausgeblendeten Eingaben enthält. so dass die tatsächliche Post Wert sieht etwa so aus:

Group1 => Array([0] => item1,[1] => item2hidden,[2] => item3,[3] => item4,[4] => item5hidden) 

so vereinfachen es:

$myArray = Array(item1, item2hidden, item3, item4, item5hidden) 

Endausgabe

$arr1 = (item1, item3, item4) 
    $arr2 = (item2hidden, item5hidden) 

Wer weiß, wie so etwas zu tun?

Antwort

7

Dies sollte den Trick:

$myArray = array('item1', 'item2hidden', 'item3', 'item4', 'item5hidden'); 
$secondaryArray = array(); 

foreach ($myArray as $key => $value) { 
    if (strpos($value, "hidden") !== false) { 
     $secondaryArray[] = $value; 
     unset($myArray[$key]); 
    } 
} 

Es bewegt sich alle Einträge, die „versteckte“ vom $myArray-$secondaryArray enthalten.

Hinweis: Es ist Groß- und Kleinschreibung

0
$myArray = Array('item1', 'item2hidden', 'item3', 'item4', 'item5hidden'); 
$arr1 = array(); 
$arr2 = array();  
foreach ($myArray as $item) { 
    if (strpos($item, "hidden") !== false) { 
     $arr1[] = $item; 
    } else { 
     $arr2[] = $item; 
    } 
} 

Diese Lösung überprüft, ob 'versteckt', die an aktuellem Elemente, wenn nicht, gehen Sie zu $arr1 anderen $arr2

11

Sie array_filter() Funktion verwenden können:

$myArray = array('item1', 'item2hidden', 'item3', 'item4', 'item5hidden'); 

$arr1 = array_filter($myArray, function($v) { return strpos($v, 'hidden') === false; }); 
$arr2 = array_diff($myArray, $arr1); 

Demo

+0

sein müssen '=== false; 'anstelle von' == false; ' – Narek

0

können Sie verwenden array_filter:

function filtreHiddens($e) { 
    if (isset($e['hidden']) && $e['hidden']) return true; 
    else return false; 
} 

function filtreNotHiddens($e) { 
    if (isset($e['hidden']) && !$e['hidden']) return true; 
    else return false; 
} 

$arrayToFiltre = array(
    array('hidden' => true, 'someKey' => 'someVal'), 
    array('hidden' => false, 'someKey1' => 'someVal1'), 
    array('hidden' => true, 'someKey2' => 'someVal3'), 
); 

$hidden = array_filter($arrayToFiltre, 'filtreHiddens'); 
$notHidden = array_filter($arrayToFiltre, 'filtreNotHiddens'); 

print_r($hidden); 
print_r($notHidden); 
0

Vielleicht mich ist es nur, aber ich würde für die Klarheit der regulären Ausdrücke gehen ...

foreach($myArray as $item) { 
    if (preg_match("/hidden$/i", $item)) { 
     array_push($arr2, $item); 
    } else { 
     array_push($arr1, $item); 
    } 
} 
Verwandte Themen