我有一个包含可变数量的子数组的多维数组 每个子数组都包含一个数字键和值列表 我有一个单独的数组,它是针对多维数组的“array_intersect_key”函数的结果,该数组仅包含每个子数组中存在的键。
我想遍历intersect_key数组,并为其中的每个项目总结与多维数组中的匹配键相关联的值,然后获取总数并使用它来替换与intersect_key数组中的键关联的值保持相同的索引ID。
每个数组中的键与数据库中文章的ID相关,与该键相关联的值是该文章中某个单词出现的次数。我正在尝试将与每篇文章相关的所有字数加在一起,以便我可以按相关性对它们进行排序。
创建数组的代码:
$arr_articles = array();
foreach($arr_words as $wordid => $word) {
$query = "SELECT articleid,wordcount FROM index_wordsearch AS iws WHERE iws.keywordid = '$wordid'";
$articlesearch = mysql_query($query);
if (!$articlesearch) {
die('Unable to search for articles matching the specified words: '.mysql_error());
} else {
$arr_ids = array();
while ($row = mysql_fetch_assoc($articlesearch)) {
$articleid = $row['articleid'];
$wordcount = $row['wordcount'];
$arr_ids["$articleid"] = "$wordcount";
}
$arr_aticles[] = $arr_ids;
}
}
$arr_matches = call_user_func_array('array_intersect_key',$arr_articles);
我已经开始尝试通过再次使用call_user_func_array()
调用来分支到自定义函数来解决这个问题,但这种方法感觉不对。
答案 0 :(得分:1)
也许替换
$arr_ids["$articleid"] = "$wordcount";
与
if (!isset($arr_ids[$articleid]))
$arr_ids[$articleid] = 0;
$arr_ids[$articleid] += $wordcount;
我建议性能,您使用单个SQL查询检索所有必需的数据(可能使用WHERE iws.keywordid IN (...)
),然后在PHP循环中处理结果。一般来说,应该避免在循环中放入SQL查询。
编辑建议:
$query = "SELECT articleid, SUM(wordcount) AS wordcount
FROM index_wordsearch
WHERE keywordid IN (".implode(", ", array_keys($arr_words)).")
GROUP BY articleid";
$articlesearch = mysql_query($query) or die('Unable to search for articles matching the specified words: '.mysql_error());
$arr_articles = array();
while ($row = mysql_fetch_assoc($articlesearch))
$arr_articles[$row['articleid']] = $row['wordcount'];
print_r($arr_articles); // shows total matched word count for each article id