我有一个快速:)
我有一个由字符串值组成的基于null的数组:
array
0 => string 'Message 1' (length=9)
1 => string '%company' (length=8)
2 => string 'Message 2' (length=9)
3 => string '%name' (length=5)
Run Code Online (Sandbox Code Playgroud)
我需要选择所有值,%并将它们理想地放入另一个数组中.
array
0 => string 'Message 1' (length=9)
1 => string 'Message 2' (length=9)
array
0 => string '%company' (length=8)
1 => string '%name' (length=5)
Run Code Online (Sandbox Code Playgroud)
谢谢!
对于任何感兴趣的人,第一个数组是验证函数的结果,因为我讨厌,当验证器返回有关百万行所需输入的信息时(例如:这<br><br>是必需的......),而不是输出实际消息,我输出必填和未填充输入的名称,将被放入一条好消息中"填写此字段,即使是必填项":)
Miniedit:即使是有关stackoverflow上的答案的问题链接,也会感激不尽:)
kap*_*apa 17
PHP> 5.3,下面你需要使用create_function().
此解决方案首先过滤原始数组,并获取以该开头的项目%.然后使用array_diff()来获取具有剩余值的数组.
$array_percent = array_filter($orig_array, function ($v) {
return substr($v, 0, 1) === '%';
});
$array_others = array_diff($orig_array, $array_percent);
Run Code Online (Sandbox Code Playgroud)
对于复活的问题道歉,但这样简单的过滤是超级简单用preg_grep().
$subject = array('Message 1', '%company', 'Message 2', '%name');
$percents = preg_grep('/^%/', $subject);
$others = preg_grep('/^%/', $subject, PREG_GREP_INVERT);
var_dump($percents, $others);
Run Code Online (Sandbox Code Playgroud)
这是一些使用简单分区代码array_walk()和匿名回调.
$result1 = array();
$result2 = array();
array_walk($array, function($v) use (&$result1, &$result2) {
if ($v[0] == '%') {
$result1[] = $v;
} else {
$result2[] = $v;
}
});
Run Code Online (Sandbox Code Playgroud)
将其放入一些可重用的代码中:
function partition($array, $callback) {
$resultTrue = array();
$resultFalse = array();
array_walk($array, function($v) use (&$resultTrue, &$resultFalse, $callback) {
if (call_user_func($callback, $v) === true) {
$resultTrue[] = $v;
} else {
$resultFalse[] = $v;
}
});
return array($resultTrue, $resultFalse);
}
// and put to use:
$partitionedData = partition($array, function($v) {
return $v[0] == '%';
});
Run Code Online (Sandbox Code Playgroud)