我要注意,这是一个非常的特殊情况,因此问题开始了。在正常情况下,这样的函数很简单:
- 我有一个名为
$post_id
的数组,包含5值(每个数值) 为了打印数组中的每个值,我使用了下面的循环:
.
for ($i = 0; $i < $num; $i++)
{
echo $post_id[$i] . ' ';
}
…输出如下内容:49, 48, 47, 46, 43
,,, 3。在我的数据库中,我有一个表,看起来像这样:
post_categories
_____________________
post_id | category
__________|__________
43 | puppies
43 | trucks
46 | sports
46 | rio
46 | dolphins
49 | fifa
,,, 4。因此,使用数组$post_id
中的数据,我想循环一个数据库查询以从post_categories表中检索类别列中的每个值,并将它们放入基于"post id"的唯一命名的数组中,以便诸如…
echo $post_id_49[0] . ' ', $post_id_46[1];
…将打印" fifa rio
",假设您使用上面的表。
查询的示例:
//Note - This is "false" markup, you'll find out why below
for ($i = 0; $i < $num; $i++)
{
$query = "SELECT category FROM post_categories WHERE post_id = $post_id[$i]";
fakeMarkup_executeQuery($query);
}
为什么这是一个"特殊"的情况?出于同样的原因,上面的查询是"false"。
详细说明一下,我在一个软件包中工作,它不允许"正常"查询,所以说,它使用自己的查询标记,以便相同的代码可以与多种数据库类型一起工作,让用户指定他们的数据库类型,让程序根据数据库类型解释查询。但是,它允许以与所有查询相同的"形式"存储查询,例如"$result = *query here*
"(唯一的区别是它自己执行)。
mysql_fetch_array
这样的函数(或者任何类似的MySQL/MySQLi函数)不能工作,也不会工作。该软件也不提供任何形式的内置替代方案,使用户有效地发明自己的方法来达到相同的结果。我知道,很蹩脚。
所以,这就是我被困的地方。正如你所期望的那样,你在互联网上找到的所有和任何信息都假设你可以使用这些MySQL & &;MySQLi函数。我需要的是一种替代方法,可以从每个循环查询的结果中获取一个数组。我简直不能得出任何实际有效的结论。
tl;dr我需要能够(1)循环查询,(2)从每个循环中获得输出,作为它自己的数组,具有它自己的名称,和(3),这样做而不使用像mysql_fetch_array
这样的函数。查询本身实际上并不重要,所以不要关注它。我知道该怎么处理这个查询
我知道这是可怕的混乱,冗长和复杂。我已经在这些混乱中挣扎了好几天——接近"作弊"的地步,并将我试图在这里获得的数据作为原始代码存储在数据库中。这是不好的做法,但对我痛苦的心灵来说肯定轻松多了。
我向任何试图解开这个烂摊子的勇敢的人致敬,祝你好运。如果这真的是不可能的,让我知道,这样我就可以给软件开发人员发一封愤怒的信。我所能猜到的是,他们从来没有想到会出现像我这样的情况。也许这比我想的要简单得多,但无论如何,我个人无法得出一个合乎逻辑的结论。额外注意:由于一些无法解释的错误,我不得不重写这个两次。为了我自己的理智,我将在发布后休息一下,所以我可能无法立即回答任何后续问题。参考tl;dr对于我的需求的最简单的解释
当然你可以这样做,在这里(假设$post_ids是你在OP中声明的post_id数组),然后我可以假设我可以用类似的查询在类似的数组中获得类别吗?
我不明白为什么你不能简单地做这件事。
$post_id = array(49, 48, 47, 46, 43);
$result = array();
foreach($post_id as $id)
{
//without knowing the data returned i cant write exact code, what is returned?
$query = "SELECT category FROM post_categories WHERE post_id = $id";
$cats = fakeMarkup_executeQuery($query);
if(!empty($cats)) {
if(!isset($result[$id])){
$result[$id] = array();
}
foreach( $cats as $cat ){
$result[$id][] => $cat;
}
}
}
输出应该是。
Array
(
[49] => Array
(
[0] => fifa
)
[46] => Array
(
[0] => sports
[1] => rio
[2] => dolphins
)
[43] => Array
(
[0] => puppies
[1] => trucks
)
)
好,假设您可以运行函数(我们将其称为 find
select
),该函数接受您的查询/ID并返回列名称到值(行)的关联数组的数组(行列表),试试这个…
$post_categories = [];
foreach ($post_id as $id) {
$rows = select("SOME QUERY WHERE post_id = $id");
/*
for example, for $id = 46
$rows = [
['category' => 'sports'],
['category' => 'rio'],
['category' => 'dolphins']
];
*/
if ($rows) { // check for empty / no records found
$post_categories[$id] = array_map(function($row) {
return $row['category'];
}, $rows);
}
}
这将导致类似下面的数组…
Array
(
[49] => Array
(
[0] => fifa
)
[46] => Array
(
[0] => sports
[1] => rio
[2] => dolphins
)
[43] => Array
(
[0] => puppies
[1] => trucks
)
)