Mam bazę danych z różnymi rodzajami produktów, które mają podobne ID (Kody EAN). Próbuję wydrukować listę wszystkich podobnych kodów, więc mogę je zaimportować i połączyć je do tego samego produktu.

Przykład:

Produkt Y ma ID 190198001795 i 0 190198001795

Produkt X ma ID 190198001780, 0 190198001780 i 00 190198001780

Co próbuję osiągnąć:

Co próbowałem: Utwórz foreach do "grupy" podobny identyfikator, ale ostatecznie może to uszkodzić właściwe grupy.

<?

// GET ALL PRODUCT ID's

$sql = "SELECT * FROM `products`";
$result = $mysqli->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

        // Total Downloads - Thousand sperator
        $shopID = $row["id"];
        $EAN = $row["ean"];

        $sqlDouble = "SELECT * FROM `products` WHERE `EAN` IN ('$EAN','0$EAN','00$EAN','000$EAN') LIMIT 200";
        $resultDouble = $mysqli->query($sqlDouble);

        if ($resultDouble->num_rows > 1) {
            // output data of each row
            while($row = $resultDouble->fetch_assoc()) {

              $EAN = $row["ean"];
              $shopID = $row["id"];
              $children[] = $EAN;
          }

        }

      }
}


foreach (array_chunk($children, 2, true) as $array) {
    echo '<div>';
    foreach($array as $kicks) {
         echo $kicks." ";
    }
    echo '</div>';
}



?>

Czy istnieje inny sposób przeanalizowania moich wierszy i sprawdzić / łączyć podobne identyfikatory?

php
-1
rwzdoorn 22 listopad 2020, 13:39

1 odpowiedź

Najlepsza odpowiedź

Spróbuj tego. Zobacz komentarze do wyjaśnienia. Wyjścia:

array(2) {
  [190198001780]=>
  array(2) {
    [2]=>
    string(13) "0190198001780"
    [8]=>
    string(14) "00190198001780"
  }
  [1234]=>
  array(2) {
    [5]=>
    string(5) "01234"
    [6]=>
    string(6) "001234"
  }
}

Kod:

<?php

$eans = ['190198001780', '8715839583923', '0190198001780', '015839583923', '1234', '01234', '001234', '001235', '00190198001780'];

foreach ($eans as $ean)
{
    // For all EANs that do not have a leading zero, try to find
    // similar ones by looking for the same code with one or more leading
    // zeroes.
    if ($ean[0] !== '0' && ctype_digit($ean))
    {
        // Look for any occurrences of this EAN with one or more (+) leading zeroes.
        // If no similar EANs found, then don't record any.
        if ($matches = preg_grep('/[0]+' . $ean . '/', $eans))
            $children[$ean] = $matches;
    }
}

var_dump($children);
/*
array(2) {
  [190198001780]=>
  array(2) {
    [2]=>
    string(13) "0190198001780"
    [8]=>
    string(14) "00190198001780"
  }
  [1234]=>
  array(2) {
    [5]=>
    string(5) "01234"
    [6]=>
    string(6) "001234"
  }
}
*/
1
Ro Achterberg 22 listopad 2020, 10:54