【问题标题】:php array echo out values that contains p1php 数组回显包含 p1 的值
【发布时间】:2014-11-16 13:10:21
【问题描述】:

您好,我有一个大约 20/30 个项目的数组。

我需要让它循环抛出数组并只回显其中包含文本 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;
    })); 

但这一切给我的只是一个空白页或 1s

如何让它回显其中包含 p1 的项目?

【问题讨论】:

  • 我会在循环中使用 strpos 并匹配 "p1" 作为针......例如,echo "
      ";预循环,回显“
    1. $value
    2. ”; on 循环迭代匹配,并回显“
    ”;后循环
  • 我得到一个充满数字 1 的页面或空白页

标签: php arrays echo contains


【解决方案1】:

使用带有字符串比较的直接循环将是一种简单的方法:

$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')); 

第二个样本的Codepad Example

【讨论】:

    【解决方案2】:

    试试这个:

    $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;
        }
    };
    

    【讨论】:

    • 如果用户输入 p1,您的最后一个答案效果很好,它会完美地显示它们,但我注意到如果用户将整个项目放入那里 usr get request like gleep1 那么它不会回显 glee1 如何我是否也会这样做,以防万一用户将完整的 tem 添加到 get
    • 如果用户将整个值放入 strpos 将返回 0,因为它在值的开头找到了它。您可以通过将值与针进行比较来解决此问题,如果它们匹配回显该值
    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多