将多个结果放在一个数组中

Posted

技术标签:

【中文标题】将多个结果放在一个数组中【英文标题】:place multiple result in a single array 【发布时间】:2015-02-09 11:36:51 【问题描述】:

我已经在 sql 中编写了代码,因为我只是想了解这个概念。完成后,我会将其更改为 sqli/pdo。所以请忽略sql方法,请帮助我解决问题

我需要一个基于特定 catid 的所有供应商名称的列表。为此,我有 2 个表子类别和 VendorSubCat。我正在尝试通过首先根据 catid 获取 subcatid(即子类别表中的 id)然后根据从上一个表中选择的 subcatid(来自 VendorSubCat 表)显示供应商名称来链接两个表。

表格视图子类别

id  subcatname  subcatdesc  catname catid

表格视图 VendorSubCat

vendorname  vendorid  subcatid  

代码

<?php
ob_start();
require_once('config.php');
$catid = $_REQUEST['catid'];
$sql1 = "SELECT * FROM subcategory where catid='" . $catid . "'";
$result1 = mysql_query($sql1);
while ($row = mysql_fetch_array($result1)) 
    $myid = $row['id'];
    if (sql1 != '0') 
        $productt = mysql_query("select * from VendorSubCat where id = '" . $myid . "' ");
        $posts = array();
        if (mysql_num_rows($productt)) 
            while ($post = mysql_fetch_assoc($productt)) 
                $posts[] = $post;
            
            header('Content-type: application/json');
            echo stripslashes(json_encode(array('list' => $posts)));
         else 
            header('Content-type: application/json');
            echo stripslashes(json_encode(array('list' => 'No productlist')));
        
    

?>

虽然代码工作正常,但结果显示在不同的数组中。它显示这样的结果

"list":["id":"1","vendorname":"Marzoogah","vendorid":"1","subcatid":"4"]"list":["id":"2","vendorname":"Zee Zone","vendorid":"2","subcatid":"4"]"list":["id":"3","vendorname":"Zee Zone","vendorid":"2","subcatid":"7"]"list":["id":"4","vendorname":"????? ????????","vendorid":"3","subcatid":"4"]

我希望将所有结果放在一个数组中,即所有列表都应该放在一个列表中。每次显示新行时,不应显示“列表”。任何帮助将不胜感激

【问题讨论】:

您可以在嵌套循环中使用联接而不是查询吗?你熟悉JOIN吗? @RobP 我试过了,但是遇到了麻烦,你能告诉我如何实现它 不确定,JOIN 将是解决它的正确方法 - 将是表的自连接 - 与要转换为列的最大行一样频繁地应用,不会它?我会调查GROUP_CONCAT()。注意:“结果被截断为 group_concat_max_len 系统变量给出的最大长度,其默认值为 1024。该值可以设置得更高,尽管返回值的有效最大长度受值的限制max_allowed_pa​​cket。” 当您想要更新您的 php 版本时,您的代码将完全被破坏。为什么还要使用mysql_ API? 【参考方案1】:

您无需立即回显结果:

echo stripslashes(json_encode(array('list' => $posts)));

相反,将所有内容收集到一个数组中:

$results = array();
//Your code
$results[] = array('list' => $posts);
//...
$results[] = array('list' => 'No product list');
//...
//And echo just one time in the end:
echo stripslashes(json_encode($results);

或类似的合并:

$results = array();
//Your code
$results = $results + $posts;
//...
$results = 'No product list';
//...
//And echo just one time in the end:
echo stripslashes(json_encode(array('list' => $results)));

此外,您可以在没有递归查询的情况下执行数据库请求;

类似:

SELECT vsc.* FROM VendorSubCat vsc
INNER JOIN subcategory sc ON vsc.id=sc.id
WHERE sc.cat_id = 15

【讨论】:

我遇到了类似的错误,你建议将所有数据收集到一个数组中,但是我很难理解它。你能告诉我你在解决方案中评论的地方需要写什么代码吗 @vp_arth 很抱歉这么晚才回复,您使用了 $results,它是否等同于我使用的任何变量还是单独的变量,请您解释一下 $results 是一个新的临时变量,用于收集$posts 数据。 @vp_arth 我也有 $posts = array();所以如果我使用 $results = array();两者不会互相冲突 你在循环中清除posts,为了获取一些新帖子,results 应该在循环之前初始化,并通过array_merge/+ 或一些手动方法从每次迭代中收集帖子。您也可以跳过$posts 并直接将新帖子添加到results,然后您可以将其重命名为posts :) 但如果您想获取所有迭代帖子,则不应在循环中清除它

以上是关于将多个结果放在一个数组中的主要内容,如果未能解决你的问题,请参考以下文章

将mysql结果放在一个数组中

php 一个结果集中有多个数组,怎样将它放入一个新的数组中

如何将SQL查询结果存放到数组里面

为啥我们可以将 GetComponent<Camera> 的结果放在 Behavior 数组中,但不能执行 GetComponent<Camera>(out behaviorA

excel vlookup函数怎么查询一个值返回多个结果

Mysqli - 将结果绑定到数组