MySQL&;PHP-循环查询和;映射“;将每个循环的结果转换为一个唯一的数组,而不使用;MySQL“;功能
我会注意到这是一个非常特殊的情况,因此首先要问这个问题。在正常情况下,该功能很简单:MySQL&;PHP-循环查询和;映射“;将每个循环的结果转换为一个唯一的数组,而不使用;MySQL“;功能,php,mysql,arrays,loops,Php,Mysql,Arrays,Loops,我会注意到这是一个非常特殊的情况,因此首先要问这个问题。在正常情况下,该功能很简单: 我有一个名为$post\u id的数组,其中包含5个值 (每个数字) 为了打印数组中的每个值,我使用以下循环: 四,。因此,使用数组$post\u id中的数据,我想循环一个数据库查询,从post\u categories表中检索category列中的每个值,并根据“post id”将它们放在唯一命名的数组中,这样类似于 echo $post_id_49[0] . ' ', $post_id
$post\u id
的数组,其中包含5个值
(每个数字)$post\u id
中的数据,我想循环一个数据库查询,从post\u categories表中检索category列中的每个值,并根据“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);
}
//注意-这是“错误”标记,您将在下面找到原因
对于($i=0;$i<$num;$i++)
{
$query=“从post_类别中选择类别,其中post_id=$post_id[$i]”;
假冒伪劣商品(查询);
}
为什么这是一个“特殊”案例?出于同样的原因,上述查询为“假”
更详细地说,我在一个不允许“正常”查询的软件包中工作,也就是说,它使用自己的查询标记,以便相同的代码可以处理多种数据库类型,让用户指定自己的数据库类型,让程序根据数据库类型解释查询。但是,它允许查询以与所有查询相同的“形式”存储,如“$result=*query here*
”(唯一的区别是它自己执行)
因此,诸如mysql\u fetch\u array
之类的函数(或类似的任何mysql/MySQLi函数)不能也不会工作。该软件也不提供任何形式的内置替代方案,有效地让用户发明自己的方法来实现相同的结果。我知道,很差劲
所以,这就是我被困的地方。正如您所期望的,您在Internet上找到的所有和任何信息都假定您可以使用这些MySQL和MySQLi函数我需要的是另一种方法,从每个循环的循环查询结果中获取一个数组。我无法得出任何实际有效的结论
tl;dr我需要能够(1)循环查询,(2)获取每个循环的输出,作为它自己的数组和它自己的名称,(3),这样做,而不使用mysql\u fetch\u array
之类的函数查询本身实际上并不重要,所以不要关注这个问题。我知道该如何处理查询。
我知道这是非常令人困惑、冗长和复杂的。我已经在这混乱的环境中跋涉了好几天了——几乎到了“作弊”的地步,并将我试图获取的数据作为原始代码存储在数据库中。糟糕的练习,但肯定会让我的心痛更容易
我向任何试图解开这一混乱局面的勇敢的灵魂致敬,祝你好运。如果这真的不可能,请让我知道,以便我可以向软件开发人员发送一封愤怒的信。我所能猜到的是,他们从来没有想过会出现像我这样的案子。也许这比我想象的要简单得多,但无论如何,我个人无法得出合乎逻辑的结论
附加说明:由于消除了一些未解释的错误,我不得不将此重写两次。为了我自己的理智,我将在发帖后休息一下,所以我可能无法立即回答任何后续问题。参考tl;dr获取我需要的最简单解释。好的,假设您可以运行一个函数(我们称之为
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
)
)
当然可以这样做,这里(假设$post_id是您在OP中声明的post_id数组),然后我可以假设我可以使用类似的查询在类似的数组中获取category吗 我不明白你为什么不能这么做
$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
)
)
“根据帖子id将它们放入唯一命名的数组”~不要这样做。简单地使用数组索引,而不是试图创建特殊命名的变量,即
$post\u vals=[49=>“fifa”,46=>“rio”,等等]
“我向任何试图解开这一混乱局面的勇敢的灵魂致敬,祝你好运。”轻描淡写。你的问题在概念上很简单,但却是一堆调试文本。对不起,但请把这归结为一个非常简单的问题:“这就是我所拥有的,这就是我想要的&这就是我正在使用的代码。出了什么问题?”@SuperCat tl;博士我看到的不是别的,只是结尾提到了它。一般来说,你的漫无边际是没有帮助的。不幸的是,它不允许查询与任何不直接在包外的函数配对,这些函数是:select、selectRow、insert、insertSelect、update、delete和deleteJoin。它们应该是不言自明的。尽管如此,这是一个很好的方法,但不幸的是它不起作用。@SuperCat显然我不知道,因为你没有把它包括在你的问题中。当然,你可以在我的答案中用find
替换select
,我只能假设它做同样的事情
$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
)
)