Php 检查字符串是否以数组中的值开头

Php 检查字符串是否以数组中的值开头,php,Php,我有一个排除类别ID的数组。我正在尝试从数据库中获取数据,并基于此数组筛选产品 1000是类别级别1 ID的示例 1000001是类别2级ID的一个示例 10000001021是类别级别3 ID的一个示例 因此,如果排除级别1,则自动排除级别2和级别3的产品。目前我正在这样做: $excludedCategories = ['1000', '100011']; while ($row = $result->fetch_assoc()) { $category = "1". $ro

我有一个排除类别ID的数组。我正在尝试从数据库中获取数据,并基于此数组筛选产品

1000是类别级别1 ID的示例 1000001是类别2级ID的一个示例 10000001021是类别级别3 ID的一个示例 因此,如果排除级别1,则自动排除级别2和级别3的产品。目前我正在这样做:

$excludedCategories = ['1000', '100011'];

while ($row = $result->fetch_assoc()) {
    $category = "1". $row['category'] . $row['sub_category'] . $row['category_id'];
    foreach ($excludeCategories as $exCategory) {
        if( substr($category, 0, strlen($exCategory)) === $exCategory ) {
            echo 'Category'. $category . " matches " . $exCategory . "<br>";
            continue;
        }
    }
}
。。但是,有没有更好的方法不用运行第二个循环就可以做到这一点呢?

如果您内爆$excludedCategories来生成preg_匹配的模式,那么您就不需要这个循环了

$excludedCategories = ['1000', '100011'];
while ($row = $result->fetch_assoc()) {
    $category = "1". $row['category'] . $row['sub_category'] . $row['category_id'];
        if( preg_match("/^".implode("|",$excludedCategories)."/", $category)) {
            echo "Category: $category Excluded <br>";
     }
}

可以在in_array$类别中,$excludedCategories?preg_match可以很容易地解决这个问题,如果数组值可以转换为正则表达式模式,如果not@manix可能不是因为我需要检查以“我看到”开头的ID。你是right@3zzy如果第一个以1000开头,为什么需要循环excludedCategories?我猜第二个是自动排除的,我是不是弄错了?哈哈,回答得不错,我就要对一个了,你赢了我,它赢不了我,它经常发生在我身上;即使是我写下来的评论,任何方式的最好的答案,我能想到的荣誉给你