这是我的代码:
$final_data[0] = array("UK","789128","X28","John");
$final_data[1] = array("USA","789128","Y29","John");
$final_data[2] = array("USA","789128","Y29","John");
$final_data[3] = array("USA","789128","P5","John");
$final_data[4] = array("UK","789128","D28","John");
.....................................................
.....................................................
$id = 0;
foreach($final_data as $value){
if(in_array("USA",$value) && in_array("/Y(.*)/",$value) ){
$filter[$id] = $value;
$id = $id + 1 ;
} }
print_r($filter);
我期待输出:
$final_data[1] = array("USA","789128","Y29","John");
$final_data[2] = array("USA","789128","Y29","John");
但它不起作用。我认为if语句里面有问题。你能否纠正if if语句?
答案 0 :(得分:2)
首先纠正您的大括号配对,然后使用preg_grep
按正则表达式模式进行搜索:
foreach($final_data as $value){
$a = preg_grep("/Y(.*)/",$value);
if(in_array("USA",$value) && !empty($a)){
$filter[$id] = $value;
}
$id = $id + 1 ;
}
可能会出现意外的点,删除或注释掉它们:
.....................................................
.....................................................
答案 1 :(得分:2)
没有开放式支架是一个问题。试图在in_array
中使用正则表达式是另一种方法。
如果您知道国家/地区的索引以及Y代码是什么,那么使用in_array
是没有意义的。或者如果你只看第一个字符的正则表达式。无论是手动跟踪$id
都没有意义。
$filtered_results = array();
foreach($final_data as $value) {
if(value[0] == 'USA' && strpos($value[2], 'Y')===0) {
$filtered_results[] = $value;
}
}