繁体   English   中英

PHP如何推送(累积)多维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM