2

メールで送信するデータの配列を整理しようとしています。データの取得に問題はありませんが、整理する方法がわかりません。

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'];                           
               }
           }
       }                     
   }

$_POSTforeach からのデータとチェック値であるデータを相互に結合しようとしています。

このようにするための私のロジックは、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に感謝します。:)

4

3 に答える 3

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 から開始する必要があります。

于 2013-08-11T08:20:02.753 に答える
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'];                           
           }
       }
   }                     

}

上記のコードで $key を $message に追加しました。$key は質問のインデックスであり、このインデックスはユーザーがフォームで選択したものと一致すると仮定しています。次に、ユーザーが選択したすべての質問を一覧表示できます。

foreach($checks as $check) 
  echo '<li>'.$check . ' - ' . $message[$check].'</li>';

これは、あなたの望むことですか?

于 2013-08-11T04:49:17.347 に答える
1

あなたの更新に基づいて:

$i=0; 
foreach($message as $msg) {
  $i++;
  echo '<li>'. $msg . ' - ' . ( isset($checks[$i])? $checks[$i] : 0 ) . '</li>';
}

多分これはあなたが望むものです。

私が言ったように、$message と $checks の間には関係があるはずです。そうでなければ、上記のコードは少し奇妙に見えます。HTML で $_POST['personalization_result'] を取得する方法を示す必要があるかもしれません。

于 2013-08-11T05:06:12.963 に答える