[英]php how to push (accumulating) multidimensional array
请用多维数组推帮助。 请查看下面的代码和注释。 推送出现错误。 分配仅给出最后一行。
if (!isset($_SESSION['page_qstn_answer'])) {
$_SESSION['page_qstn_answer'] = array("page" => array(), "qstn" => array(), "answer" => array()
}
if (!isset($temp)) {
$temp = array("page" => array(), "qstn" => array(), "answer" => array() );
}
while($question = mysqli_fetch_assoc($question_set) ) {
if(isset($question['position']) ){
$post_qstn = $question['position'];
If(isset($_POST[$qstn]) ) {
//printing all rows from db correctly as below
//echo "Question ".$qstn." - selected answer ".$answer . " on page ".$page ."<br />";
if (isset($temp) ){
$temp = array ("page"=>$page, "qstn"=>$qstn,"answer"=> $answer);}
//show a one by one array rows correctly but $temp has a one row at a time that is Ok
//print_r($temp);
// Try to accumulate $temp into $_Session array. Push is giving an error
//$_SESSION['pages_qstn_answers'] = array_push($_SESSION['pages_qstn_answers'], $temp);
// No error but no accumulation as foreach as below shows the only one last row.
$_SESSION['pages_qstn_answers'] = $temp;
}
foreach ($_SESSION['pages_qstn_answers'] as $key => $value) {
echo "$key = $value\n";}
我使用在网站上找到的函数来删除所有以前添加的相同问题,然后再将$ temp条目累积到最终数组中,因为应该只有一个问题一个答案。 似乎可行。 如果有人在那里看到一些缺点,请提出建议。 谢谢
remove_elm($_SESSION['pages_qstn_answers'], "qstn", $qstn, TRUE);
$_SESSION['pages_qstn_answers'][] = $temp;
function remove_elm($arr, $key, $val, $within = FALSE) {
foreach ($arr as $i => $array)
if ($within && stripos($array[$key], $val) !== FALSE && (gettype($val) === gettype($array[$key])))
unset($arr[$i]);
elseif ($array[$key] === $val)
unset($arr[$i]);
return array_values($arr);
}
您对array_push()
工作方式有误解。 它不返回数组,而只是将其具有的任何值附加到数组中。 因此,当您这样做时:
$_SESSION['pages_qstn_answers'] = array_push($_SESSION['pages_qstn_answers'], $temp);
等式的右侧仅返回一个整数,其中包含新数组中元素的数量。 假设您数组中现在有5个元素,实际上就是
$_SESSION['pages_qstn_answers'] = 5;
而是做:
array_push($_SESSION['pages_qstn_answers'], $temp);
或者由于您只附加一个值,我会坚持:
$_SESSION['pages_qstn_answers'][] = $temp;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.