【发布时间】:2016-04-29 07:50:06
【问题描述】:
我正在从数据库中提取有关项目的信息。
每个不同的项目都有自己的索引号:
$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/>";
}
【问题讨论】:
-
array_unique在join之前? -
@u_mulder 你的意思是我应该在代码中实现
array_unique?不知道如何从文档中的示例中做到这一点。简单地在 join 之前插入它会导致语法错误。此外,文档说array_unique假设 remove 重复,而我想 keep 重复。 -
上面的sql有错误
SELECT Name, Status from item")"table~一个假的) -
是的,它只是一个错字,我会修复它。
-
@RyanVincent 我不想让它独一无二,我只想创建 2 个变量/索引而不是一个。两者都应该是相同的,只要索引号是根据它们在我的数组中的顺序。
标签: php mysql arrays database mysqli