我快点:)
我有一个由字符串值组成的基于空的数组:
array
0 => string 'Message 1' (length=9)
1 => string '%company' (length=8)
2 => string 'Message 2' (length=9)
3 => string '%name' (length=5)
我需要选择以%
开头的所有值,理想情况下将它们放入另一个数组中。
array
0 => string 'Message 1' (length=9)
1 => string 'Message 2' (length=9)
array
0 => string '%company' (length=8)
1 => string '%name' (length=5)
谢谢!
对于任何感兴趣的人,第一个数组是验证函数的结果,因为我讨厌,当验证器返回有关百万行所需输入的信息时(例如:这是必需的<br><br>
...),而不是输出真实的消息,我输出必需和未填充输入的名称,将其放入一个很好的消息'字段,这甚至是强制性的':)
Miniedit:即使对于有关stackoverflow的答案的问题链接也会感激不尽:)
答案 0 :(得分:17)
PHP&gt; 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);
答案 1 :(得分:6)
为复活问题而道歉,但像这样的简单过滤是超级简单 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);
答案 2 :(得分:5)
这是一些使用array_walk()
和匿名回调的简单分区代码。
$result1 = array();
$result2 = array();
array_walk($array, function($v) use (&$result1, &$result2) {
if ($v[0] == '%') {
$result1[] = $v;
} else {
$result2[] = $v;
}
});
将其放入一些可重复使用的代码中:
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] == '%';
});
答案 3 :(得分:2)
您可以将array_filter与callback,
一起使用<?php
$array = array(
0 => 'Message 1' ,
1 => '%company' ,
2 => 'Message 2' ,
3 => '%name' );
function start_with($var)
{
return $var[0] == '%';
}
function dont_start_with($var)
{
return $var[0] != '%';
}
$startw = array_filter($dizi,'start_with'); // filtering elements
$startw = array_values($startw); // reseting indexes.
$nstartw = array_filter($dizi,'dont_start_with');
$nstartw = array_values($nstartw);
var_dump($startw , $nstartw);
?>
答案 4 :(得分:1)
$array2=array();
foreach($array as $key => $value)
{
if($value[0] =='%')
{
$array2[]=$value;
unset($array[$key]);
}
}
修改强>
取消设置后你可以使用foreach
循环迭代数组可以使用array_values
函数来构造新数组