Размещение данных базы данных в многомерном массиве

0

Для моего интернет-магазина у меня есть 1 база данных с 3 соответствующими таблицами. Чтобы отобразить данные, мне было рекомендовано вывести данные из этих баз данных в 3 двумерных массива, чтобы я мог визуализировать то, что я делал. Однако моя единственная успешная попытка размещения данных в массиве привела к перезаписи кода, только показывая последние данные в таблице.

Может ли кто-нибудь дать мне несколько советов о том, как настроить мой массив таким образом, чтобы он автоматически заполнялся?

<?php
        //Create the Multiarrays. 2D, one per table.

        // Create connection
        $conn = new mysqli(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        //Open the database
        $sql = "SELECT * FROM productwindow";
        $result = $conn->query($sql);

        //Multiarray locatie 1. When the array starts here, the browser chokes.
            if ($result->num_rows > 0) {
                //multiarray locatie 2. When the array starts here, the browser also chokes.
                while($row = $result->fetch_assoc()) {

                    $product = array( //multiarray locatie 3. The problem is that the array seems to overwrite itself.
                        array(  //I want PHP to repeat this bit of code for every product in my database, so that I can use it later on.
                            "ID" => $row["ID"],
                            "Name" => $row["Productname"],
                            "Price" => $row["Pricetag"],
                            "Supply" => $row["Productsupply"],
                            "Tags" => $row["Tags"],
                            "Materials" => $row["Materials"],
                        ),
                    );
                }
                //Multiarray locatie 2 end woul be placed here
            } else {
                echo "0 results found. Please check database connection.";
            }
        //Multiarray locatie 1 end woul be placed here. 

        $conn->close();
        //      
        echo "<br/>";
        $searchby = "Pluimstaart";//The keyword that I used in earlier concepts to filter on specific products. I now need a for loop to procedurally run through the multiarray.
        $array_subjected_to_search = $product;
        $key = array_search($searchby, array_column($array_subjected_to_search, "Name")); //If it cannot be done via a foreloop, I would need an alternative to "array_search" to show the contents of my array.
        var_dump($array_subjected_to_search[$key]);//Used to see if I actually fill my array with data. It only shows the latest data.

        //From here on out I build the website like follows;
        echo "<br/>product data: " . $product[$key["Supply"]] . ".";
    ?> 

Большое спасибо за ваш отзыв!

Теги:
database
arrays
multidimensional-array

3 ответа

2
Лучший ответ

Переменная $product переписывается в каждом цикле, потому что вы каждый раз становитесь равным новому массиву:

$product = array(...

Вместо этого вы должны добавлять элементы в конец массива, используя либо array_push, либо эту стенографию:

$product[] = [
    "ID" => $row["ID"],
    "Name" => $row["Productname"],
    "Price" => $row["Pricetag"],
    "Supply" => $row["Productsupply"],
    "Tags" => $row["Tags"],
    "Materials" => $row["Materials"]
];
  • 0
    Это работает отлично, большое спасибо!
1

Попробуйте заменить код кода else, используя этот код, и попробуйте

      $product[]=array();
      if ($result->num_rows > 0) {                
            while($row = $result->fetch_assoc()) {
                $product[]["ID"]=$row["ID"];
                $product[]["Name"]=$row["Productname"];
                $product[]["Price"]=$row["Price"];
                $product[]["Supply"]=$row["Supply"];
                $product[]["Tags"]=$row["Tags"];
                $product[]["Materials"]=$row["Materials"];                    
            }

        } else {
            echo "0 results found. Please check database connection.";
        }
  • 0
    Впервые я увидел многомерный массив, объявленный так. Это дает четкое представление о том, как это работает, спасибо, Бхаскар!
0

Я не уверен, что это то, что вы имели в виду...

$i = 0; 
$product = array();

while($row = $result->fetch_assoc()) {

   $product[$i] = array(

    "ID" => $row["ID"],
    "Name" => $row["Productname"],
    "Price" => $row["Pricetag"],
    "Supply" => $row["Productsupply"],
    "Tags" => $row["Tags"],
    "Materials" => $row["Materials"],

  );
$i++;
}
  • 0
    Спасибо за помощь, Дитер, код, предоставленный Гэри, немного более элегантен, но, похоже, это тоже работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню