2014-09-22 35 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')); 

第二樣品