我正在尝试为我的firebird数据库构建一个归档类。我已经有过几次以下问题:
我想构建一个像这样的数组结构:
/**
* @var [] stores the success log of all db operations
*
* $_log = Array(
* (string) [DATA_SOURCE] => Array(
* (int) [0] => Array(
* (string) [id] => (int) 32,
* (string) [action] => (string) "update/insert/delete",
* (string) [state] => (int) 1,
* (string) [message] => (string) "success/error",
* )
* )
* )
*/
private $_log = array();
我的1.尝试:
// push result to log array
array_push(
$this->_log,
array(
"archive" => array(
"id" => $row["ID"],
"action" => "update",
"state" => $success,
),
)
);
结果:
Array(
[0] => Array(
[archive] => Array(
[id] => 32
[action] => update
[state] => 1
)
)
)
这不是我想要的。我希望“data-source”-key在这里“存档”在推入的条目[0]前面。
MY 2nd TRY
array_push(
$this->_log["archive"],
array(
"id" => $row["ID"],
"action" => "update",
"state" => $success,
)
);
结果
<br />
<b>Warning</b>: array_push() expects parameter 1 to be array, null given in <b>/Users/rsteinmann/web/intranet/pages/firebird/ArchiveTables.php</b> on line <b>238</b><br />
我对这项任务有点无奈。我也尝试在google或stackoverflow上找到任何东西,但没有什么真正有用的。
如果有人可以帮助我,我会很高兴的!
谢谢你, 圣拉斐尔
答案 0 :(得分:2)
$this->log['archive'][] = array('id' => ...);
这是实现这一目标的最佳方式。 PHP将为您创建任何不存在的密钥(如archive
)。另一方面,array_push
是函数调用,并且要求其参数已经存在,它不能为您创建不存在的archive
键。在调用函数之前,您必须这样做。
array_push
), array_push($arr, $a, $b, $c)
非常有用,否则$arr[] = $a
是首选的officially recommended语法。