PHP将数组分为两组,基于值。

时间:2023-01-01 12:42:17

I have a PHP array that I am trying to split into 2 different arrays. I am trying to pull out any values that contain the word "hidden". So one array would contain all the values that do not contain the word "hidden". The other array would contain all the values that do contain the word "hidden". I just can't figure out how to do it though.

我有一个PHP数组,我想把它分成两个不同的数组。我正在尝试提取任何包含“隐藏”一词的值。因此,一个数组将包含所有不包含“隐藏”字的值。另一个数组包含所有包含“隐藏”字的值。我就是想不出怎么做。

The original array is coming from a form post that contains keys and values from a bunch of check boxes and hidden inputs. so the actual post value looks something like this:

原始数组来自一个表单post,该表单包含一系列复选框和隐藏输入的键和值。所以实际的后值是这样的

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

so to simplify it:

为了简化:

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

final output

最终输出

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

Anyone know how to do something like this?

有人知道怎么做这样的事情吗?

5 个解决方案

#1


8  

This should do the 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]);
    }
}

It moves all the entries that contain "hidden" from the $myArray to $secondaryArray.

它将包含“隐藏”的所有条目从$myArray移动到$secondaryArray。

Note: It's case sensitive

注意:这是区分大小写的

#2


13  

You can use array_filter() function:

您可以使用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);

Demo

演示

#3


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

This solution checks if 'hidden' present at current item, if no, move to $arr1 else to $arr2

这个解决方案检查当前项目中是否隐藏了“隐藏”,如果没有,则转移到$arr1到$arr2。

#4


0  

You can use array_filter:

您可以使用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);

#5


0  

Maybe it's just me, but I would go for the clarity of regular expressions...

也许只有我一个人,但我想要的是正则表达式的清晰……

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

#1


8  

This should do the 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]);
    }
}

It moves all the entries that contain "hidden" from the $myArray to $secondaryArray.

它将包含“隐藏”的所有条目从$myArray移动到$secondaryArray。

Note: It's case sensitive

注意:这是区分大小写的

#2


13  

You can use array_filter() function:

您可以使用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);

Demo

演示

#3


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

This solution checks if 'hidden' present at current item, if no, move to $arr1 else to $arr2

这个解决方案检查当前项目中是否隐藏了“隐藏”,如果没有,则转移到$arr1到$arr2。

#4


0  

You can use array_filter:

您可以使用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);

#5


0  

Maybe it's just me, but I would go for the clarity of regular expressions...

也许只有我一个人,但我想要的是正则表达式的清晰……

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