Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL&;PHP-循环查询和;映射“;将每个循环的结果转换为一个唯一的数组,而不使用;MySQL“;功能_Php_Mysql_Arrays_Loops - Fatal编程技术网

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
            )
    
    )