将多维数组分隔为单独的数组

时间:2013-04-25 15:50:31

标签: php arrays

我试图了解数组。

数组应如下所示:

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

8 个答案:

答案 0 :(得分: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;
}

Here’s a demo!

答案 1 :(得分:0)

将您的while循环更改为此

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

在原始代码中,您每次都覆盖$ answer [$ a]和$ comment [$ a],而不是追加到数组末尾

答案 2 :(得分:0)

$questions[$a] = array('Q1?' => 'A1', 'Q2?' => 'A2', 'Q3?' => 'A3');

foreach($questions[$a] as $key => $value)
{
    $comment[$a][] = $key;
    $answer[$a][] = $value;
}

答案 3 :(得分: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 ....)

的值

答案 4 :(得分: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];
    }
}

答案 5 :(得分:0)

这是正确答案

foreach($questions as $key => $question){
  foreach($question as $q => $data){
   $data= explode(',',$data);
   $comments[$key][$q] = $data[0];
   $answer[$key][$q] = $data[1];
  }
}

答案 6 :(得分: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_walkarray_filter等函数以及使用回调的类似函数通常是利用匿名函数提供的灵活性的好地方。

答案 7 :(得分: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);