我在这里有一个数组:
Array
(
[1] => Array
(
[id] => 1
[items] => Array
(
[0] => Array
(
[id] => 1
)
[1] => Array
(
[id] => 2
)
[2] => Array
(
[id] => 3
)
)
)
[2] => Array
(
[id] => 2
[items] => Array
(
[0] => Array
(
[id] => 4
)
[1] => Array
(
[id] => 5
)
)
)
)
问题:当它转到第二个阵列时,如何重置项目id
?
我一直试图为这个算法挤压我的头,但找不到方法:(
这是我获取数组的源代码,如果有帮助的话。为了清晰起见,我简化了数组,下面的代码是扩展的:
$results = array();
$i = 0;
while ($row = mysql_fetch_assoc($result)) {
$i++;
$results[] = array(
$row['id'] => array(
'category' => $row['category'],
'items' => array(
array(
'id' => $i, //THIS IS THE PROBLEM
'name' => $row['name'],
'user_name' => $row['user_name'],
'price' => $row['price'],
'item_photo' => $row['item_photo'],
'item_description' => $row['item_description']
)
)
)
);
}
// Begin rebuilding trees
$output = array();
//$results is array from mysql
foreach ($results as $data) {
//var_dump($data);
//dumping each block of array
foreach ($data as $categoryId => $item) {
//check if NOT yet set
if (!isset($output[$categoryId])) {
//insert values in the first Array()
$output[$categoryId] = array(
'id' => $categoryId,
'category' => $item['category'],
'items' => array()
);
}
//populate 'items' array with stuff
$output[$categoryId]['items'] =
array_merge(
$output[$categoryId]['items'],
$item['items']
);
}
}
如果有的话请告诉我。
答案 0 :(得分:1)
首先,最重要的是,请不要使用mysql_*
API,因为这些功能现已弃用。相反,请使用MySQLi或PDO(个人而言,我会使用PDO,因为它支持各种数据库连接,但这只是我的观点)
使用id
解决问题所需要做的就是将先前的id存储在变量中并对其进行测试。以下可能不正确,因为您的代码非常令人困惑,但它应该足以让您走上正确的轨道:
$i = 0;
while($row = mysql_fetch_assoc($result)){
// Only increment i if it is still the same row
// otherwise reset it
if($row_id==$row['id']){
$i++;
}else{
$i = 0;
}
// Set the new row id
$row_id = $row['id'];
// Do your stuff...
}
答案 1 :(得分:1)
假设您的结果已排序,因此每个类别的项目都是连续的(一个类别不会显示在结果的不同位置):
$oldCat = "";
while ($row = mysql_fetch_assoc($result)) {
// If the current category is different than the previous, reset $i
if ($row['category'] != $oldCat)
$i == 0;
// Set $oldCat to the current categery (used for next loop's comparison)
$oldCat = $row['category'];
$i++;
$results[] = array(
[ ... ]
)
}
此外,您可以将$i
设置为一行:
// If the current category is different than the previous, reset $i
$i = $row['category'] != $oldCat ? 0 : $i++;
为了清楚起见,您可能需要制作稍微更具描述性的数组键。例如,您有id
两次 - 可能是category_id
和item_id
。