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 )

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

第二次编辑:需要在循环中执行此操作以创建第三个数组 -

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

这就是我所拥有的:(minitech 第 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

如果它们实际上是字符串,则explode有效:

$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;
}

这是一个演示!

于 2013-04-27T19:56:30.553 回答
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[$a] = array('Q1?' => 'A1', 'Q2?' => 'A2', 'Q3?' => 'A3');

foreach($questions[$a] as $key => $value)
{
    $comment[$a][] = $key;
    $answer[$a][] = $value;
}
于 2013-04-25T15:54:30.203 回答
0

这应该有效。

foreach ($questions[$a] as $key=>$value){
  $temp = explode(',',$value);
  $answer[$key] = $temp[0];
  $comment[$key] = $temp[1];
}

$key 将分别有 0,1,2。$value 将具有每个 $question[$a](No,Comment1 ....) 的值

于 2013-04-25T15:56:26.227 回答
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 声明为函数中的全局变量。我认为这是一种 hacky 方法(使用这样的全局变量),所以如果我使用 PHP < 5.3,我可能会像其他问题的答案一样使用 foreach 循环。

array_walk,array_filter和使用回调的类似函数通常是利用匿名函数提供的灵活性的好地方。

于 2013-04-25T15:58:21.623 回答
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 回答