我正在尝试组织要在电子邮件中发送的数据数组。我没有问题获取数据,但我不知道如何组织它。
Foreach: 此处输出用户在后端生成的问题列表
$message = array();
foreach($questions['questions'] as $key => $value){
if(is_array($value) && isset($value[ 'questionlist'])){
foreach($value as $key => $subquestion){ //line 119
foreach ($subquestion as $key => $value){
$message[] = $value['a-question'];
}
}
}
}
我正在尝试将数据相互结合,来自foreach的数据和作为检查值的$_POST
数据。
我这样做的逻辑是因为一个来自数据库,一个只是表单数据(不需要保存到数据库,它来自前端,而不是通过数据库生成的数据)后端)那说也许有更好的方法,但我几乎得到了这个我只是不确定如何加入数据所以它看起来像
<li>MYARRAYDATA - MYFORMDATA</li>
<li>MYARRAYDATA - MYFORMDATA</li>
<li>MYARRAYDATA - MYFORMDATA</li>
//The form input data '0', '1' values
$checks = $_POST['personalization_result'];
//Putting that data into array_values
$checkValues = array_values($checks);
//Then passing the array_values into 'implode' and organizing it with a list (<li>)
$checkString = '<li>'.implode('</li><li>',$checkValues).'</li>';
//Then testing with var_dump outputs a nice list of '0','1' values
var_dump ($checkString);
尝试使用相同的方法但尝试连接foreach
数组并且检查值不起作用,这是一个示例。
//Similar to $checkValues I pass the data from the foreach into "array_values"
var_dumping this works fine.
$arrayValues = array_values($message);
//This is obvious it's the same as above it "implodes" the data nicely into a list(<li>)
$arrayString = '<li>'.implode('</li><li>',$arrayValues).'</li>';
//This var dumps the "$arrayString" nicely
var_dump ($arrayString)
实际问题再次出现在这里,我如何连接每一段数据?
我的尝试: 以下是我尝试“联合”数据。
// This does not work well (maybe by cleaning up it can work) but it outputs 2 separate lists
var_dump ($arrayString.'_'.$checkString);
//I tried to run it inside one implode variable this is invalid arguments
$checkString = '<li>'.implode('</li><li>',$arrayValues.'_'.$checkValues).'</li>';
//Modified one implode variable this outputs see below
$checkString = '<li>'.implode('</li>'.$arrayValues.'<li>',$checkValues).'</li>';
<li>Array
1</li>
<li>Array
0</li>
<li>Array
1</li>
<li>Array
0</li>
var_dump结果: 这是每个数组的var_dump结果,我想将它们合并为一个列表
$ _ POST阵列
// Var dump of form $_POST DATA
var_dump ($checkString);
//Result
1 //This is generated through the $_POST method not on database
0 //This is generated through the $_POST method not on database
1 //This is generated through the $_POST method not on database
0 //This is generated through the $_POST method not on database
DATABASE数组
// Var dump of datbase generated from backend
var_dump ($arrayString);
//Result
I am 1 //This is generated in the backend and is stored on a database
Hi I am 2 //This is generated in the backend and is stored on a database
civil is 3 //This is generated in the backend and is stored on a database
THIS IS FOURTA //This is generated in the backend and is stored on a database
目标
I am 1 - 1 //This is checked
Hi I am 2 - 0 //This is NOT checked
civil is 3 - 1 //This is checked
THIS IS FOURTA - 0 //This is NOT checked
答案: 感谢@ xdim222
我起初并不理解它,因为增量,但现在我理解了这一切,最初它会起作用,但我的变量在foreach语句下,这导致它不返回数组。
至少在我看来那是什么,因为当我将变量添加到foreach之上时它起作用了。
我修改了答案以适合我的代码。
//$messages = array('test1', 'test2', 'test3', 'test4', 'test5');
//Instead of using this array I used the array generated in my foreach above.
// Instead of this $checks = array(1,0,1,0); I take the $_POST value which generates an array, you can see above.
$checkValues = array_values($checks);
$checkString = implode($checkValues);
$i=0;
foreach($messages as $msg) {
echo $msg . ' - ' . ( isset($checkString[$i])? $checkString[$i] : 0 ) . '<br>';
$i++;
}
再次感谢 @ xdim222 有耐心,阅读我的长问题,最重要的是帮助我学习,通过提出这个问题并找到解决方案,这些东西真的很棒,在我看来是最好的学习的方式(通过询问)。 :)
答案 0 :(得分:2)
为了更容易,我直接分配$ messages和$ checks,我已经尝试过这段代码并且它有效。您可能有不同的数组元素,但我认为您可以从下面的代码中找出它:
$messages = array('test1', 'test2', 'test3', 'test4', 'test5');
$checks = array(1,0,1,0);
$i=0;
foreach($messages as $msg) {
echo $msg . ' - ' . ( isset($checks[$i])? $checks[$i] : 0 ) . '<br>';
$i++;
}
PS:我在之前的回答中犯了错误,在回显之前递增了$ i,数组元素应该从0开始。
答案 1 :(得分:1)
在等待您对上述评论的回复时,我正试着在这里写一些代码..
我假设您要显示从数据库中提取的问题,并且应根据用户在表单中选择的内容显示问题。所以你可以使用这段代码:
foreach($questions['questions'] as $key => $value){
if(is_array($value) && isset($value[ 'questionlist'])){
foreach($value as $key => $subquestion){ //line 119
foreach ($subquestion as $key => $value){
$message[$key] = $value['a-question'];
}
}
}
}
我在上面的代码中在$ message中添加了$ key,假设$ key是一个问题的索引,并且该索引将与用户在表单中选择的内容相匹配。然后我们可以列出用户选择的所有问题:
foreach($checks as $check)
echo '<li>'.$check . ' - ' . $message[$check].'</li>';
这是你想要的吗?
答案 2 :(得分:1)
根据您的更新:
$i=0;
foreach($message as $msg) {
$i++;
echo '<li>'. $msg . ' - ' . ( isset($checks[$i])? $checks[$i] : 0 ) . '</li>';
}
也许这就是你想要的。
正如我所说,$ message和$ checks之间应该有关系,否则上面的代码看起来有点奇怪,因为我们怎么知道用户选择了一个问题?也许您应该展示如何在HTML中获得$ _POST ['personalization_result']。