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

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

ВТОРОЙ РЕДАКТИРОВКА : Нужно выполнить это в цикле, чтобы создать третий массив -

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

+0

Извините, я принял предложение преждевременно, мне также нужен этот код, выполняемый как часть цикла для создания третьего массива ... 'if ($ answer [$ a] ==" Да ") {$ display [$ a] = "style = 'display: none'"; } else {$ display [$ a] = "style = 'display: block'"; } ' – Edward

+0

Хорошо, я добавил ответ. – Ryan

ответ

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

+0

Просто, чтобы уточнить, как я могу создать $ display array с выше, я считал $ a like $ display [$ a] каждой итерацией, я определяю ее как $ display [] и просто использую $ display для каждой итерации? Надеюсь, что это имеет смысл! – Edward

+0

@Edward: Это заменяет ваш внутренний цикл, так что это все равно будет '$ display [$ a]'. – Ryan

0

Изменить время цикла для этого

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

В исходном коде вы перезапись $ ответ [$ а] и $ коментарий [$ a] каждый раз, не добавляя к концу массива

+0

ах. попытаюсь. веселит. – Edward

+0

Немного изменился, поскольку я не был уверен, что вы сделали раскол (также я пропустил там скобку) – fullybaked

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 соответственно. $ Значение будет иметь значения для каждого $ вопроса [$ а] (Нет, Comment1 ....)

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, вам нужно объявить именованную функцию и объявить $ reply и $ comment в качестве глобальных переменных в функции. Я думаю, что это взломанный подход (используя такие глобальные переменные), поэтому, если бы я использовал PHP < 5.3, я бы, вероятно, просто использовал цикл foreach, как и другие ответы на ваш вопрос.

Такие функции, как array_walk, array_filter и аналогичные функции, в которых используются обратные вызовы, часто являются отличными местами для обеспечения гибкости, предоставляемой анонимными функциями.

+0

это довольно круто. попробуем немного. – Edward

+0

5.2: (спасибо за пример tho, это будет иметь в виду, если мы обновим его. – Edward

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);     
Смежные вопросы