メールで送信するデータの配列を整理しようとしています。データの取得に問題はありませんが、整理する方法がわかりません。
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'];
}
}
}
}
$_POST
foreach からのデータとチェック値であるデータを相互に結合しようとしています。
このようにするための私のロジックは、1つはデータベースからのものであり、1つは単なるフォームデータであるためです(バックエンドを介して生成されるデータベースからのデータとは異なり、フロントエンドからのものであり、データベースに保存する必要はありません)おそらくもっと良い方法があると言いましたが、私はほとんどこれを手に入れました。データを結合する方法がわからないので、次のようになります
<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 の結果です。これらを 1 つのリストにまとめたいと思います。
$_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
データベース配列
// 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に感謝します。:)