我的代码中存在问题

时间:2015-04-18 09:03:53

标签: php

这是我的代码:

$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语句?

2 个答案:

答案 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;
    }
}