Для моего интернет-магазина у меня есть 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"]] . ".";
?>
Большое спасибо за ваш отзыв!
Переменная $product
переписывается в каждом цикле, потому что вы каждый раз становитесь равным новому массиву:
$product = array(...
Вместо этого вы должны добавлять элементы в конец массива, используя либо array_push, либо эту стенографию:
$product[] = [
"ID" => $row["ID"],
"Name" => $row["Productname"],
"Price" => $row["Pricetag"],
"Supply" => $row["Productsupply"],
"Tags" => $row["Tags"],
"Materials" => $row["Materials"]
];
Попробуйте заменить код кода 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.";
}
Я не уверен, что это то, что вы имели в виду...
$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++;
}