php用正则匹配二维数组的键值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php用正则匹配二维数组的键值相关的知识,希望对你有一定的参考价值。
数组是这样子的:
Array
(
[sid] => 12099983
[name] => naffan
[GET_19870404] => Array
(
[name] => yifan
[sex] => male
)
[GET_19611008] => Array
(
[name] => guiying
[sex] => female
)
)
我想得到键值以GET_开头的数组。请问我用哪个正则函数,怎么用?
注:不要用 $res = preg_grep("/Array/",$arr);
手册上写的 preg_grep() 返回的结果使用从输入数组来的键名进行索引。 这句话不是让我特别的明白。
我倒是从你的测试数据看出来 你要过滤出 值是数组的。
array_filter($array, ‘is_array’);这样也不是达到你的目的了吗?追问
我看了手册,这个确实应该能够达到我的目的。但是,你跟我补充的意思一样,如果这个数组里还有别的数组,而不是以get_开头的。那么你的这个不就有问题了么。你说呢。
我想得到键值以GET_开头的数组。 这个是需求。
虽然我已经解决了,我用strpos循环做的。但是,我这个不理想。想看看正则怎么做。你还能么?
$array = array(
'dd'=>'12',
'GET_xx'=>array('123'),
'POST_xx'=>array('12345'),
);
function filter($value) return !preg_match('/^(GET_|POST_)/',$value,$matches);
$result = array_diff_key($array,array_fill_keys(array_filter(array_keys($array),'filter'),''));
var_dump($result);
验证测试通过
我确实测试过了,这个只对一维有效。另外,你说的方法也没有错误。我明白你说的。你说的没错。但是,不是我想知道的。谢谢了。你还能继续帮我往下多答一点么?
PHP如何根据数组中的键值进行排序
主要是使用PHP的排序函数,asort()和arsort()。
为了减少代码的耦合性,我们将根据数组中的键值进行排序封装成一个函数
1 <?php 2 $array = array( 3 array(‘name‘=>‘aa‘,‘price‘=>1050), 4 array(‘name‘=>‘bb‘,‘price‘=>4300), 5 array(‘name‘=>‘cc‘,‘price‘=>3100), 6 array(‘name‘=>‘dd‘,‘price‘=>4900), 7 array(‘name‘=>‘ee‘,‘price‘=>960), 8 array(‘name‘=>‘ff‘,‘price‘=>6299), 9 array(‘name‘=>‘gg‘,‘price‘=>1200) 10 ); 11 function arr_sort($array,$key,$order="asc"){ //asc是升序 desc是降序 12 $arr_nums=$arr=array(); 13 foreach($array as $k=>$v){ 14 $arr_nums[$k]=$v[$key]; 15 } 16 if($order==‘asc‘){ 17 asort($arr_nums); 18 }else{ 19 arsort($arr_nums); 20 } 21 foreach($arr_nums as $k=>$v){ 22 $arr[$k]=$array[$k]; 23 } 24 print_r($arr); 25 } 26 arr_sort($array,‘price‘);
以上是关于php用正则匹配二维数组的键值的主要内容,如果未能解决你的问题,请参考以下文章