1

私は配列に頭を悩ませようとしています。

配列は次のようになります。

$questions[$a] => array( [0] => No, comment1
                         [1] => Yes, comment2
                         [2] => No, comment3 )

$answer[$a] => array( [0] => No
                      [1] => Yes
                      [3] => No )

$comment[$a] => array( [0] => comment1
                       [1] => comment2
                       [3] => comment3 )

================================================== =======================

2番目の編集:これをループで実行して3番目の配列を作成する必要があります-

if($answer[$a] == "Yes") { $display[$a] = "style='display:none'"; 
} else { $display[$a] = "style='display:block'"; }

これは私が持っているものです:(ミニテックの28番目)

while ($a > $count)
{
if($count > 11) {
foreach($questions as $q) {
    list($answer, $comments[]) = explode(',', $q);
    if($answer === "Yes") { 
    $display[$a] = "style='display:none'"; 
    } else { 
    $display[$a] = "style='display:block'"; 
    }

$answers[] = $answer;
    }
  }
$a++;
}
4

8 に答える 8

1

If they are actually strings, explode works:

$answers = array();
$comments = array();
$display = array();

foreach(array_slice($questions, 11) as $question) {
    list($answer, $comments[]) = explode(',', $question);
    $display[] = $answer === 'Yes' ? 'style="display: none"' : 'style="display: block"';
    $answers[] = $answer;
}

Here’s a demo!

于 2013-04-27T19:56:30.553 に答える
0

ファンキーなワンライナーは考えられませんが、これでうまくいくはずです:

foreach ($questions as $a => $entries) {
    foreach ($entries as $k => $entry) {
        $parts = array_map('trim', explode(',', $entry));
        $answer[$a][$k] = $parts[0];
        $comment[$a][$k] = $parts[1];
    }
}
于 2013-04-25T15:57:54.347 に答える
0

正解はこちら

foreach($questions as $key => $question){
  foreach($question as $q => $data){
   $data= explode(',',$data);
   $comments[$key][$q] = $data[0];
   $answer[$key][$q] = $data[1];
  }
}
于 2013-04-25T15:58:02.077 に答える
0

の値$questionsがカンマ区切りの文字列の場合、array_walk関数を使用し$answer$comment配列にデータを入力できます

$question = array(...); //array storing values as described
$answer = array();
$comment = array();

array_walk($question, function ($value, $key) use ($answer,$comment) {
    $value_array = explode(',', $value);
    $answer[$key] = $value_array[0];
    $comment[$key] = $value_array[1];
});

これは、PHP >= 5.3.0 を必要とする無名関数 (クロージャー) を使用して示されていることに注意してください。以前のバージョンの PHP を使用している場合は、名前付き関数を宣言し、その関数で $answer と $comment をグローバルとして宣言する必要があります。これはハッキーなアプローチだと思います(このようなグローバルを使用する)ので、PHP < 5.3を使用していた場合、質問に対する他の回答が提案するように foreach ループを使用するだけです。

のような関数やarray_walkarray_filterコールバックが使用される同様の関数は、多くの場合、無名関数によって提供される柔軟性を活用するのに最適な場所です。

于 2013-04-25T15:58:21.623 に答える
0

while ループをこれに変更します

while ...
{
$parts = explode(',', $questions[$a]);
$answer[$a][] = trim($parts[0]);
$comment[$a][] = trim($parts[1]);
}

元のコードでは、配列の末尾に追加するのではなく、毎回 $answer[$a] と $comment[$a] を上書きしていました

于 2013-04-25T15:53:14.783 に答える
0
$questions = array( 0 => 'No,comment1',1 => 'Yes,comment2',2 => 'No,comment3' );

foreach($questions as $question)
{
    $parts = explode(",",$question);
    $answer[] = $parts[0];
    $comment[] = $parts[1]; 
}

echo "<pre>";
print_r($answer);
print_r($comment);                 
于 2013-04-25T16:00:14.770 に答える