我从数据库中提取有关项目的信息。
每个不同的项目都有自己的索引号:
$product[$x]
如果我列出项目两次(参见代码中的banana
),则只会创建一个索引号。
如何为每个项目创建索引编号,而不管该项目是否已被调用?
<?php
include 'connect.php'; //
// Choose Relevant Items, and turn them into an array
$item_array = array(
'apple',
'banana',
'banana'
);
//implode items, turn into string
$item_implode = join("','", $item_array);
//declare an overall array for result
$product = array();
$productList = array();
$result = $mysqli->query("SELECT Name, Status as item_status from item_table where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode');");
if ($result->num_rows > 0) {
$x = 1;
// output data of each row
while($row = $result->fetch_assoc()) {
$product[$x]["Name"] = $row['Name'];
$product[$x]["item_status"] = $row['item_status'];
$x = $x + 1;
}
} else {
echo "0 results";
}
// test print all avaialable database values
for ($i=1; $i <= count($product); $i++) {
echo $product[$i]["Name"] . " - ";
echo $product[$i]["item_status"] . "<br/>";
}
使用当前代码,$product[3]
(我希望banana
)不存在,因为代码似乎自动删除重复项。 我不想让它删除。
我的动机是,稍后在代码中,我可能希望在两个变体中显示相同的项目,当我显示项目时,我使用在项目索引号上运行的循环。因此,对于我$item_array
中当前出现的任何项目,循环将没有任何内容可以运行,除非代码将被更改,以便根据我放在我的数组中的内容得到重复。
修改
更新了工作代码:
<?php
include 'connect.php';
// Choose Relevant items, and turn them into an array
$item_array = array(
'apple',
'banana',
'carrot',
'banana',
'carrot',
'berry'
);
//implode items, turn into string
$item_implode = join("','", $item_array);
//declare an overall array for result
$product = array();
$result = $mysqli->query("SELECT Name, Status as item_status from item_table where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode');");
// New Code:
while($row = $result->fetch_assoc()) {
$fruit_name = $row['Name'];
// next you need to find all keys in $item_array which value is the fruit
$keys = array_keys($item_array, $fruit_name);
foreach ($keys as $key) {
// add values for these keys
$product[$key+1]['Name'] = $row['Name'];
$product[$key+1]['item_status'] = $row['item_status'];
}
}
/* REPLACED CODE: //////////////////////////
if ($result->num_rows > 0) {
$x = 1;
// output data of each row
while($row = $result->fetch_assoc()) {
$product[$x]["Name"] = $row['Name'];
$product[$x]["item_status"] = $row['item_status'];
$x = $x + 1;
}
}
else {
echo "0 results";
}*/
/////////////////////////////////////////////
// test print all avaialable database values
for ($i=1; $i <= count($product); $i++) {
echo $product[$i]["Name"] . " - ";
echo $product[$i]["item_status"] . "<br/>";
}
答案 0 :(得分:2)
首先 - 不需要搜索重复的项目。 您当前的查询是:
SELECT Name, Status from item)table where Name IN ('apple', 'banana', 'banana')
多余
在创建array_unique
时执行$item_implode
:
$item_implode = join("','", array_unique($item_array));
这会使$item_array
保持不变,但会减少您的查询。
接下来,如果我说得对,你需要db中的一个项目来查询。这意味着如果在db中有几个香蕉,则只应在$product
中放置一条记录。好的,这样做:
$founded_fruits = array();
// special array to track founded fruits
if ($result->num_rows > 0) {
$x = 1;
// output data of each row
while($row = $result->fetch_assoc()) {
// I suppose that `$row['Name']` is name of a fruit
if (!in_array($row['Name'], $founded_fruits)) {
$founded_fruits[] = $row['Name'];
$product[$x]["Name"] = $row['Name'];
$product[$x]["Status"] = $row['Status'];
}
$x = $x + 1;
}
} else {
echo "0 results";
}
<强>更新即可。好的 - 你希望products
中的水果出现与$item_array
中出现的水果相同。试试这个:
$product = array();
while($row = $result->fetch_assoc()) {
$fruit_name = $row['Name'];
// next you need to find all keys in $item_array which value is the fruit
$keys = array_keys($item_array, $fruit_name);
foreach ($keys as $key) {
// add values for these keys
$products[$key]['Name'] = $row['Name'];
$products[$key]['item_status'] = $row['item_status'];
}
}