我遇到的问题是in_array似乎没有在数组中找到值。该数组由几个表中的类别和信息构成,但这一切都很好(相对!)。代码的目的是,如果行在$ level中具有正确的值(在函数中提供),并且在数组中尚未找到category_id,则应该添加它。如果在数组中找到它,则应该完全从数组中删除它。我一直在调试,似乎in_array永远不会返回正面,所以我认为我在这里实现了一个错误。请参阅以下代码:
$sql = 'SELECT c.category_id, cd.name, cp.level ' .
'FROM oc_category c ' .
'LEFT JOIN c_category_description cd ' .
'ON cd.category_id = c.category_id ' .
'LEFT JOIN oc_category_path cp ' .
'ON cp.category_id = c.category_id';
$categories = $mysqli->query($sql);
$i = 0;
while($row = $categories->fetch_array())
{
if ($row['level'] == $level)
{
if (in_array($row['category_id'], $cat_level_1))
{
unset($cat_level_1[$i]);
$i++;
}
else
{
$cat_level_1[] = $row['category_id'];
$i++;
}
}
}
目前,此输出(截断为7行)为:
array (size=40)
0 => string '17' (length=2)
1 => string '18' (length=2)
2 => string '20' (length=2)
3 => string '24' (length=2)
4 => string '25' (length=2)
5 => string '26' (length=2)
任何关于我犯了什么错误的想法都会受到赞赏!
萨姆
答案 0 :(得分:0)
我相信您的问题是unset($cat_level_1[$i]);
您将$i
设置为从0开始,只要您发现$row['category_id']
位于$cat_level_1
内某处,就会删除第一个条目,而不是与{匹配的实际条目{1}}。
您可能希望使用$row['category_id']
功能,它会返回找到项目的密钥,如果您将array_search()
设置为该密钥,那么您的代码可能会有更好的结果。
答案 1 :(得分:0)
所以你的代码所做的是:
$cat_level_1
,其中将存储第一级别类别$level
级别,我猜之前在某个地方设置为1
(可能发布整个逻辑代码会更好)
$cat_level_1
包含正在处理的类别,请删除所有$cat_level_1
数组现在if
条件只匹配 ,如果SQL查询返回多个具有相同category_id
的类别 - 我猜它不会......如果确实如此,那么SQL查询是错误的。
我不会问你做什么你需要做这样的逻辑,但想一些修改:
$level
,以便仅返回$level
级别的类别category_id
多一次 - 如果是,请尝试在您的SQL查询中使用GROUP BY
子句language_id
!然后您的查询可能如下所示:
$sql = 'SELECT c.category_id, cd.name, cp.level ' .
'FROM oc_category c ' .
'LEFT JOIN c_category_description cd ' .
'ON cd.category_id = c.category_id AND cd.language_id = ' . $this->config->get('language_id') .
'LEFT JOIN oc_category_path cp ' .
'ON cp.category_id = c.category_id' .
'WHERE cp.level = ' . $level;
应该产生例如这个查询:
SELECT c.category_id, cd.name, cp.level
FROM oc_category c
LEFT JOIN c_category_description cd ON cd.category_id = c.category_id AND cd.language_id = 2
LEFT JOIN oc_category_path cp ON cp.category_id = c.category_id
WHERE cp.level = 1
现在您不需要任何PHP if level
和if in_array
逻辑...