добавить значение в ассоциативный массив с foreach? - PullRequest
6 голосов
/ 31 марта 2011

Решение найдено и проголосовало


Вот мой код:

//go through each question
foreach($file_data as $value) {
    //separate the string by pipes and place in variables
    list($title, $content, $date_posted) = explode('|', $value);

    //create an associative array for each input
    $file_data_array['title'] = $title;
    $file_data_array['content'] = $content;
    $file_data_array['date_posted'] = $date_posted;

}

Что происходит, так это то, что соответствующие значения продолжают стираться. Есть ли способ, которым я могу добавить значение в массив? Если нет, то как еще я могу это сделать?

Ответы [ 4 ]

8 голосов
/ 31 марта 2011

Вы можете добавить к массиву $file_data_array что-то вроде этого:

foreach($file_data as $value) {
    list($title, $content, $date_posted) = explode('|', $value);
    $item = array(
        'title' => $title, 
        'content' => $content, 
        'date_posted' => $date_posted
    );
    $file_data_array[] = $item;
}

(временную переменную $item можно было бы избежать, выполнив объявление массива и обработку в конце $file_data_array одновременно)


Для получения дополнительной информации посмотрите следующий раздел руководства: Создание / изменение с использованием синтаксиса в квадратных скобках

2 голосов
/ 31 марта 2011

Хотите добавить ассоциативные массивы к $file_data_array?

Если так:

//go through each question
foreach($file_data as $value) {
    //separate the string by pipes and place in variables
    list($title, $content, $date_posted) = explode('|', $value);

    //create an associative array for each input
    $file_data_array[] = array(
        "title" => $title,
        "content" => $content,
        "date_posted" => $date_posted,
    );

}
0 голосов
/ 31 марта 2011

попробуйте это:

$file_data_array = array(
     'title'=>array(),
     'content'=>array(),
     'date_posted'=>array()
);
//go through each question
foreach($file_data as $value) {
    //separate the string by pipes and place in variables
    list($title, $content, $date_posted) = explode('|', $value);

    //create an associative array for each input
    $file_data_array['title'][] = $title;
    $file_data_array['content'][] = $content;
    $file_data_array['date_posted'][] = $date_posted;

}

ваш окончательный массив будет выглядеть примерно так:

$file_data_array = array(
   'title' => array ( 't1', 't2' ),
   'content' => array ( 'c1', 'c2' ),
   'date_posted' => array ( 'dp1', 'dp2' )
)

вот демонстрация этого:

http://codepad.org/jdFabrzE

0 голосов
/ 31 марта 2011

Вам нужен дополнительный ключ.

//go through each question
$x=0;
foreach($file_data as $value) {
    //separate the string by pipes and place in variables
    list($title, $content, $date_posted) = explode('|', $value);

    //create an associative array for each input
    $file_data_array[$x]['title'] = $title;
    $file_data_array[$x]['content'] = $content;
    $file_data_array[$x]['date_posted'] = $date_posted;
    $x++;
}    
...