PHP разделение массива на два массива на основе значения

у меня есть массив PHP, который я пытаюсь разделить на 2 разных массива. Я пытаюсь вытащить любые значения, содержащие слово "скрытый". Таким образом, один массив будет содержать все значения, которые не содержат слова "скрытый". Другой массив будет содержать все значения, которые содержат слово "hidden". Я просто не могу понять, как это сделать.

исходный массив поступает из сообщения формы, содержащего ключи и значения из группы флажков и скрытых входной. поэтому фактическое значение выглядит примерно так:

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

так, чтобы упростить ее:

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

конечный вывод

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

кто-нибудь знает, как сделать что-то подобное?

5 ответов


Это должно сделать трюк:

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

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

он перемещает все записи, которые содержат "скрытые" из $myArray to $secondaryArray.

Примечание: чувствительно к регистру


можно использовать array_filter() функция:

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

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

демо


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

Это решение проверяет, присутствует ли "скрытый" в текущем элементе, если нет, перейдите в $arr1 else to $arr2


вы можете использовать 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);

может быть, это только я, но я бы пошел на ясность регулярных выражений...

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