来自查询的自定义数组仅写入查询的最后一行

时间:2020-01-14 作者:simlpymarkb

正在寻找对此的一些输入。我正在编写一个自定义数组,但有一个奇怪的问题。它似乎在循环中循环,删除以前的值,只存储查询的最后一行。有什么想法吗?

global $wpdb;
$queryresult = $wpdb->get_results(select query);

$modified_result = array();

foreach($queryresult as $result){
    $modified_result[\'name\'] = $result->name;
    $modified_result[\'address\'] = $result->address;
}

$datadump = json_encode($modified_result);
echo file_put_contents(\'my_output.json\', $datadump);

// outputs {"name":"Mark","address":"1313 Mockingbird Lane"}
// which is only the LAST row in the query instead of
// building an array of ALL names and addresses that should be
// produced by the loop. Any ideas anyone?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

这是因为您没有向数组中添加元素。您正在覆盖它们:

$modified_result = array();

foreach($queryresult as $result){
    $modified_result[\'name\'] = $result->name;
    $modified_result[\'address\'] = $result->address;
}
您的循环正在设置nameaddress 的属性$modified_result 直接数组,然后为循环中的每个项替换它们。

你想要的$modified_result 是数组的数组,这意味着$result 您需要将新数组添加到$modified_result. 你可以用$modified_result[]:

$modified_result = array();

foreach ( $queryresult as $result ) {
    $modified_result[] = array(
        \'name\'    => $result->name,
        \'address\' => $result->address,
    );
}
尽管如此,我从您的代码中看不出任何原因,为什么您不能只查询要开始的字段。那么您根本不需要循环:

$queryresult = $wpdb->get_results( "SELECT name, address FROM ..." );

$datadump = json_encode( $queryresult );
echo file_put_contents( \'my_output.json\', $datadump );