【问题标题】:PHP mysql recursive function array_unshiftPHP mysql递归函数array_unshift
【发布时间】:2013-08-26 23:13:24
【问题描述】:

我对 PHP 中的递归函数有疑问。我调用函数并从数据库中获取行,然后将行放入数组中,然后再次调用函数以获取与行连接的其他行...问题是,array_unshift 仅保存第一行而其他不保存。问题是什么。谢谢你的回答。

    public static function nahrejZpravy($responseTable, $responseId){
    $return = Array();
    $query = "SELECT * FROM Zpravy WHERE responseTable = '$responseTable' AND responseId = '$responseId'";
    $result = query($query);
    while($row = mysql_fetch_assoc($result)){
        array_unshift($return, $row);
        Zpravy::nahrejZpravy('Zpravy', $row['id']);
    }  
    return $return;
}

【问题讨论】:

  • 您应该添加 PHP 标签以获得更多帮助
  • 你为什么需要那个,最后你想要一个数组中的所有信息?你不能只有while($row = ....) { $rows[] = $row } return $rows。在您的情况下,您希望每次迭代以在 where 子句中添加下一个 id,直到按 id 选择所有行,这对我来说完全意味着您可以摆脱它?
  • 为什么?我有 Zpravy 数据库表。在这里,我有一些文本......并定义了,如果在此消息之前是哪个消息。所以我从数据库中获取数据作为消息,而不是我之前将它们作为消息......比我将它全部保存到数组中并在视图中我正在遍历数组并写入消息。
  • 好吧,您将使用您找到的每个 $row['id'] 查询您的数据库。但是,如果你想坚持自己的方式,首先检查 $row 输出什么,它是什么类型的数组?也许您需要再次遍历它并通过 array_unshift 保存值。如果没有帮助,也许给我们 $row 和方法本身的 var_dump 会很好
  • 不是每个 $row['id'],但仅适用于例如 ids 2、3、11、18。我会得到这个 id 的行,我想把它保存到一个数组中。为什么?我的代码有什么问题?为什么它只保存第一行?

标签: php mysql recursion


【解决方案1】:
<?php

function getResponsesRecursive($responseTable, $responseId) {
    $responses = array();
    $query = "SELECT * FROM Zpravy WHERE responseTable = '$responseTable' AND responseId = '$responseId'";
    $result = mysql_query($query);
    while ( $row = mysql_fetch_assoc($result) ) {
        $row['responses'] = getResponsesRecursive($row['table'], $row['id']);
        $responses[] = $row;
    }
    return $responses;
}
?>

【讨论】:

    【解决方案2】:

    你实际上需要这样的东西:

    <?php
    
    function getResponsesRecursive($responseTable, $responseId) {
        $responses = array();
        $query = "SELECT * FROM Zpravy WHERE responseTable = '$responseTable' AND responseId = '$responseId'";
        $result = query($query);
        while ( $row = mysql_fetch_assoc($result) ) {
            $row['responses'] = getResponsesRecursive($row['table'], $row['id']);
            $responses[] = $row;
        }
        return $responses;
    }
    

    例如:

    $myArr = getResponsesRecursive('table', 0);
    
    $myArr = arrary(
        array(
            'id'    =>  1,
            'table' =>  'table-name',
            'responses' =>  array(
                ...
            )
        )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2013-09-21
      • 2011-01-29
      • 2011-12-02
      • 2019-07-02
      相关资源
      最近更新 更多