我有一个由字符串值组成的基于空的数组:
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>
这是必需的......),而不是输出真实的消息,我想输出必需的和未填充的输入的名称,将其放入漂亮的一条消息“字段这个、那个甚至那个都是强制性的”。
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);
很抱歉重新提出这个问题,但是像这样的简单过滤是超级简单,带有
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);
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] == '%';
});
您可以将array_filter与回调一起使用,
<?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);
?>
$array2=array();
foreach($array as $key => $value)
{
if($value[0] =='%')
{
$array2[]=$value;
unset($array[$key]);
}
}
编辑
取消设置后,您可以使用
foreach
循环来迭代数组可以使用array_values
函数来构造新数组