2013-04-25 45 views
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) 

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

SECOND EDIT :需要在循环执行此创建一个第三阵列 -

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

这是我有:(28日为MiniTech移动)

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

如果它们实际上是用逗号分隔的字符串,这将是一个问题。试试['explode'](http://php.net/explode)。 – Ryan 2013-04-25 15:51:36

+0

对不起,我过早地接受了,我也需要这个代码作为循环的一部分执行,以创建第三个数组...'if($ answer [$ a] ==“Yes”){$ display [$ a] =“style ='display:none'”; } else {$ display [$ a] =“style ='display:block'”; }' – Edward 2013-04-28 00:51:32

+0

好的,我添加了一个答案。 – Ryan 2013-04-28 01:43:11

回答

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!

+0

ahh ... ok gottcha,请试试看,谢谢! – Edward 2013-04-28 13:21:21

+0

为了说明一下,我如何创建$ display数组上面,我每次迭代计数$ a就像$ display [$ a]一样,我将它定义为$ display [],并且每次迭代都使用$ display?希望这是有道理的! – Edward 2013-04-28 13:33:26

+0

@Edward:这会替换你的内部循环,所以它仍然是'$ display [$ a]'。 – Ryan 2013-04-28 13:34:24

0

while循环改成这样

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

在你原来的代码你覆盖$答案[$ A]和$评论[$ a],而不是追加到数组的末尾

+0

啊。会尝试。干杯。 – Edward 2013-04-25 15:53:43

+0

稍微修改,因为我不确定你是否完成了拆分(我错过了支架) – fullybaked 2013-04-25 15:57:19

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

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

这应该有效。

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

$ key将分别具有0,1,2。 $值将为每个$问题的值[$一](不,注释1 ....)

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

这里是正确的答案

foreach($questions as $key => $question){ 
    foreach($question as $q => $data){ 
    $data= explode(',',$data); 
    $comments[$key][$q] = $data[0]; 
    $answer[$key][$q] = $data[1]; 
    } 
} 
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和类似函数的函数,其中使用回调通常是利用匿名函数提供的灵活性的好地方。

+0

这很酷。会尝试一下。 – Edward 2013-04-25 16:00:26

+0

5.2 :(感谢这个例子,如果我们升级的话会记住的, – Edward 2013-04-27 18:46:26

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);