preg_match_all подсчитывает слово соответствия, используя $ row - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу найти количество слов в строке, используя $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 голосов
/ 18 сентября 2018

Насколько я понимаю, $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, как и ожидалось.

...