PHP:使用array_merge的foreach循环来创建json对象

时间:2015-04-23 13:47:13

标签: php mysql arrays json foreach

我是php的新手,但到目前为止我真的很喜欢它! 现在我偶然发现array_merge的问题。

这是我的代码,它只是抓取我数据库中指定的每个表,然后将其转换为一个大的json文件:

  $tables = array("buildings", "medical", "other", "tools", "traps", "weapons"); 

    foreach ($tables as $table) {

        // Get tables from database
        $sth = $db->query("SELECT * FROM $table");
        $result = $sth->fetchAll();

        // Merge arrays together
        if ($arr === null) {
            //echo "its 0 <br/> ";
            $arr = array( "$table" => $result );
        } else {
            //echo "more than 0 <br/> ";
            $arr2 = array( "$table" => $result );
            $merge = array_merge($arr, $arr2);
        }

    } //End loop

    echo $merge;

到目前为止它正在以某种方式工作,我设法得到第一个表“建筑物”和最后一个表“武器”以我想要的方式显示!

但我不明白为什么它跳过其他的.. 我认为它与$arr2有关,我需要为每个表指定一个唯一的数组。但是我怎样才能做到这一点?这是要走的路还是有更有效的方法来实现这一目标? 谢谢!

5 个答案:

答案 0 :(得分:1)

您可以将所有内容放在一个唯一的数组中,例如:

$myArray["$table"] = $result;

答案 1 :(得分:1)

$("#option_one").click(function() {
    $("#input").val('Option 1');

    $.getScript( "path/calculating.js" )
    .done(function( script, textStatus ) {
        //Just after the scripts finishes loading you will be able
        //to perform/use functionality included on this script
        console.log( textStatus );
    })
    .fail(function( jqxhr, settings, exception ) {
        console.log("Triggered ajaxError handler.");
    });
});

创建新数组并将索引设置为表名,并将其结果存储在该数组中。

答案 2 :(得分:1)

如果我理解正确......

而不是这两行

var any = false;
$("select").change(function(){
    var str = $("select").val();
    var n = str.toString().search("Any,");
    if(n==0 && !any){
        $("select option[value!='Any']").each(function(){
            $(this).attr("selected",false);
        });
        any = !any;
        $("select option[value='Any']").attr("selected",true);
    }
    else if(str.toString().search(",")!=-1){
        any = !any;
        $("select option[value='Any']").attr("selected",false);
    }
});

你可以试试这个:

$arr2 = array( "$table" => $result );
$merge = array_merge($arr, $arr2);

答案 3 :(得分:1)

由于这条线而失败

    $merge = array_merge($arr, $arr2);

您的合并始终是$ arr(这是$ tables中的第一个条目)和$ arr2的合并,$ arr2是正在处理的最新条目。您没有将数据与先前合并的数据合并,例如

    $arr = array_merge($arr, $arr2)

此外,您可以通过将$ arr设置为空数组来启动来摆脱if / else逻辑。

    $arr = array();

答案 4 :(得分:1)

您的代码可以大大简化。

$tables = array("buildings", "medical", "other", "tools", "traps", "weapons"); 
foreach ($tables as & $table) {
    $table = $db->query("SELECT * FROM $table")->fetchAll();
}
echo json_encode($tables);

当然,您仍然需要检查错误(数据库和JSON错误),以便使代码更健壮,但是您可以更简单地创建更好的代码。简单就是好,特别是在编程方面。