2013-11-20 10 views
9

Mam tablicę PHP, którą próbuję podzielić na 2 różne tablice. Próbuję wyciągnąć wszelkie wartości, które zawierają słowo "ukryte". Tak więc jedna tablica zawiera wszystkie wartości, które nie zawierają słowa "ukryte". Druga tablica zawierałaby wszystkie wartości, które zawierają słowo "ukryte". Po prostu nie mogę wymyślić, jak to zrobić.PHP dzieli tablicę na dwie tablice na podstawie wartości

Oryginalna tablica pochodzi z postu formularza, który zawiera klucze i wartości z wielu pól wyboru i ukrytych danych wejściowych. więc rzeczywista wartość postu wygląda mniej więcej tak:

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

tak, aby go uprościć:

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

ostatecznego wyjścia

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

ktoś wie jak zrobić coś takiego?

Odpowiedz

7

To powinno załatwić sprawę:

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

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

Porusza wszystkie wpisy, które zawierają "ukryte" z $myArray do $secondaryArray.

Uwaga: To wielkość liter

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

To rozwiązanie sprawdza czy 'ukryte' obecne na aktualnej pozycji, jeśli nie, przejdź do $arr1 innego do $arr2

11

Można użyć array_filter() funkcję:

$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

Muszą być '=== false; 'zamiast' == false; ' – Narek

0

Można użyć 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

Może to tylko ja, ale chciałbym przejść do jasności wyrażeń regularnych ...

foreach($myArray as $item) { 
    if (preg_match("/hidden$/i", $item)) { 
     array_push($arr2, $item); 
    } else { 
     array_push($arr1, $item); 
    } 
} 
Powiązane problemy