我有一个PHP数组,我试图分成2个不同的数组。我试图提取包含“隐藏”一词的任何值。因此,一个数组将包含不包含单词“hidden”的所有值。另一个数组将包含包含“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)
任何人都知道如何做这样的事情?
答案 0 :(得分:14)
您可以使用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 强>
答案 1 :(得分:9)
这应该可以解决问题:
$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
移至$secondaryArray
。
注意:区分大小写
答案 2 :(得分: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;
}
}
此解决方案会检查当前项目中是否显示“隐藏”,如果不是,请移至$arr1
否则转至$arr2
答案 3 :(得分:0)
您可以使用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);
答案 4 :(得分:0)
也许这只是我,但我会考虑正则表达式的清晰度......
foreach($myArray as $item) {
if (preg_match("/hidden$/i", $item)) {
array_push($arr2, $item);
} else {
array_push($arr1, $item);
}
}