preg_match_all使用$ row计算匹配词

时间:2018-09-18 14:06:44

标签: php preg-match preg-match-all

我想使用$row查找字符串中的单词数,但我不知道如何。

在此变量$row['item_name']中:

IphoneAsus Strix LaptopIphoneBagIphoneCalculatorMakeupIphoneWalletIphone

我正在使用以下代码:

<?php 
error_reporting(0);
?>

<html>
<head>
    <title></title>
</head>
<body>
    <table>
        <tr>
            <th>ID</th>
            <th>Item Name</th>
            <th>Type</th>
            <th>Brand</th>
            <th>Model</th>
            <th>Color</th>
            <th>Status</th>
        </tr>
        <?php 

        $db = mysqli_connect("localhost","root","","matching");

        $sql = "SELECT * FROM item";

        $result = mysqli_query($db, $sql) or die ("Invalid Query: $sql");

        if ($result->num_rows > 0) 
        {
            while($row = $result->fetch_assoc()) 
            {
                echo "<tr>
                <td align='center'>" . $row["id"] . "</td>
                <td align='center'>" . $row['item_name'] . "</td>
                <td align='center'>" . $row['sub1_type'] . "</td>
                <td align='center'>" . $row['sub2_brand'] . "</td>
                <td align='center'>" . $row['sub3_model'] . "</td>
                <td align='center'>" . $row['sub4_color'] . "</td>
                <td align='center'>" . $row['status'] . "</td>
                </tr>";

                //inside this $row['item_name']: Iphone, Asus Strix Laptop, Iphone, Bag, Iphone, Calculator, Makeup, Iphone, Wallet, Iphone

                echo $number = preg_match_all('/Iphone/', $row['item_name']);
                // output:1010100101
            }
        }

        ?>
</table><br><br>
    <?php
    $a="IphoneAsus Strix LaptopIphoneBagIphoneCalculatorMakeupIphoneWalletIphone";    
    echo $number = preg_match_all('/Iphone/', $a); //ouput:5  
    ?>

</body>
</html>

输出应为:5

但是输出显示:1010100101

有人有主意吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

据我了解,$row['item_name']不包含IphoneAsus Strix LaptopIphoneBagIphoneCalculatorMakeupIphoneWalletIphone,但每一行都包含:

  1. Iphone-> 1场比赛
  2. Asus Strix Laptop-> 0个匹配项
  3. Iphone-> 1场比赛
  4. Bag-> 0个匹配项
  5. Iphone-> 1场比赛

...

因此,对于您的10行,您有1010100101

看看生成的页面的来源,您没有1010100101,但是先是1然后是0然后是1然后是0 ... <tr>...</tr>

之间

我建议您更改行:

echo $number = preg_match_all('/Iphone/', $row['item_name']);

具有:

$number += preg_match_all('/Iphone/', $row['item_name']);

然后在while循环之后:

echo $number; 

在这里您将拥有预期的5