2014-09-22 58 views
0

嗨,我有一个大约20/30项大的数组。php array echo出包含p1的值

我需要让它循环抛出数组,并只回显其中的文本p1的项目。

阵列看起来像这样

"lolly","lollyp1","top","topp1","bum","bump1","gee","geep1" 

我曾试图用这样的

foreach ($arr as $value) { 
    $needle = htmlspecialchars($_GET["usr"]); 
    $ret = array_keys(array_filter($arr, function($var) use ($needle){ 
    return strpos($var, $needle) !== false; 
    })); 

但是这一切给了我是一个空白页或1

我怎么能让它回声与p1在他们的项目?

+0

我会用在循环和匹配的“P1” strpos随着针的Codepad Example ....例如,回声“

    “;预回路,回声“
  1. $ value
  2. ”;循环迭代匹配,并回显“
”; post-loop – 2014-09-22 14:17:36

+0

另外,什么是1s? – 2014-09-22 14:18:20

+0

我得到一个页面充满数字1或空白页 – user72261 2014-09-22 14:19:52

回答

0

试试这个:

$needle = htmlspecialchars($_GET["usr"]); 
$rtnArray = array(); 
foreach ($arr as $value) { 
    $rtnArray = strpos($value,$needle); 
}; 
return $rtnArray; 

如果你想直接写入到页面的失去$ rtnarray和回声:

$needle = htmlspecialchars($_GET["usr"]); 
foreach ($arr as $value) { 
    echo strpos($value,$needle); 
}; 

,只显示那些与 'P1' 然后过滤:

$needle = htmlspecialchars($_GET["usr"]); 
foreach ($arr as $value) { 
    $temp = strpos($value,$needle); 
    if($temp > 1){ 
     echo $value; 
    } 
}; 
+0

你最后的answear作品很好,如果用户输入p1它显示他们都完美,但我已经注意到一个问题,如果用户把完整的项目在那里usr获取请求,如gleep1然后它剂量回声glee1我怎么会做到这一点,以及如果用户剂量添加完整的工程得到 – user72261 2014-09-22 14:31:09

+0

如果用户把整个值你strpos将返回0,因为它发现它在值的开始。你可以通过比较这些数值与针头的匹配值来达到此目的 – DirtyRedz 2014-09-22 21:14:43

0

使用字符串比较的直接循环将是一个简单的方法去这里:

$needle = $_GET['usr']; 
$matches = array(); 
foreach ($arr as $key => $value) { 
    if (strpos($value, $needle) !== false) { 
     $matches[] = $key; 
    } 
} 

采用array_filter()在您的文章应该工作,PHP的版本待定你使用。尝试更新使用单独的/定义的函数:

function find_needle($var) { 
    global $needle; 
    return strpos($var, $needle) !== false; 
} 
$ret = array_keys(array_filter($arr, 'find_needle')); 

第二样品