Как вывести нужные данные с массива PHP

432
21 июня 2017, 02:08

В общем, есть массив со следующим содержимым:

Array
(
    [0] => common\models\references\SQuizQuestion Object
        (
            [topics_id_arr] => 
            [_attributes:yii\db\BaseActiveRecord:private] => Array
                (
                    [id_rec] => 821
                    [name_quest] => Вопрос 4
                    [text_quest] => Текст к вопросу 4
                    [msg_quest] => Сообщение к вопросу 4
                    [random] => 1
                    [dt_up] => 13.06.2017 10:21:17
                    [status] => 1
                )
            [_related:yii\db\BaseActiveRecord:private] => Array
                (
                    [squizqa] => Array
                        (
                            [0] => common\models\references\SQuizQA Object
                                (
                                    [_attributes:yii\db\BaseActiveRecord:private] => Array
                                        (
                                            [id_rec] => 365
                                            [id_question] => 821
                                            [name_answer] => Второй
                                            [text_answer] => Не правильный
                                            [corr_answer] => 0
                                            [dt_up] => 13.06.2017 10:21:17
                                            [status] => 1
                                        )
                                    [_related:yii\db\BaseActiveRecord:private] => Array
                                        (
                                        )
                                    [_errors:yii\base\Model:private] => 
                                    [_validators:yii\base\Model:private] => 
                                    [_scenario:yii\base\Model:private] => default
                                    [_events:yii\base\Component:private] => Array
                                        (
                                        )
                                    [_behaviors:yii\base\Component:private] => Array
                                        (
                                        )
                                )
                            [1] => common\models\references\SQuizQA Object
                                (
                                    [_attributes:yii\db\BaseActiveRecord:private] => Array
                                        (
                                            [id_rec] => 364
                                            [id_question] => 821
                                            [name_answer] => Первый
                                            [text_answer] => Правильный
                                            [corr_answer] => 1
                                            [dt_up] => 13.06.2017 10:21:17
                                            [status] => 1
                                        )
                                    [_related:yii\db\BaseActiveRecord:private] => Array
                                        (
                                        )
                                    [_errors:yii\base\Model:private] => 
                                    [_validators:yii\base\Model:private] => 
                                    [_scenario:yii\base\Model:private] => default
                                    [_events:yii\base\Component:private] => Array
                                        (
                                        )
                                    [_behaviors:yii\base\Component:private] => Array
                                        (
                                        )
                                )
                        )
                )
            [_errors:yii\base\Model:private] => 
            [_validators:yii\base\Model:private] => 
            [_scenario:yii\base\Model:private] => default
            [_events:yii\base\Component:private] => Array
                (
                )
            [_behaviors:yii\base\Component:private] => Array
                (
                )
        )
    [1] => common\models\references\SQuizQuestion Object
        (
            [topics_id_arr] => 
            [_attributes:yii\db\BaseActiveRecord:private] => Array
                (
                    [id_rec] => 781
                    [name_quest] => Вопрос 1
                    [text_quest] => Текст к вопросу 1
                    [msg_quest] => Сообщение к вопросу 1
                    [random] => 1
                    [dt_up] => 07.06.2017 11:00:59
                    [status] => 1
                )
            [_related:yii\db\BaseActiveRecord:private] => Array
                (
                    [squizqa] => Array
                        (
                            [0] => common\models\references\SQuizQA Object
                                (
                                    [_attributes:yii\db\BaseActiveRecord:private] => Array
                                        (
                                            [id_rec] => 321
                                            [id_question] => 781
                                            [name_answer] => Простой ответ
                                            [text_answer] => Правильный ответ
                                            [corr_answer] => 1
                                            [dt_up] => 13.06.2017 10:19:25
                                            [status] => 1
                                        )
                                    [_related:yii\db\BaseActiveRecord:private] => Array
                                        (
                                        )
                                    [_errors:yii\base\Model:private] => 
                                    [_validators:yii\base\Model:private] => 
                                    [_scenario:yii\base\Model:private] => default
                                    [_events:yii\base\Component:private] => Array
                                        (
                                        )
                                    [_behaviors:yii\base\Component:private] => Array
                                        (
                                        )
                                )
                            [1] => common\models\references\SQuizQA Object
                                (
                                    [_attributes:yii\db\BaseActiveRecord:private] => Array
                                        (
                                            [id_rec] => 361
                                            [id_question] => 781
                                            [name_answer] => Простой ответ
                                            [text_answer] => Не правильный ответ
                                            [corr_answer] => 0
                                            [dt_up] => 13.06.2017 10:19:25
                                            [status] => 1
                                        )
                                    [_related:yii\db\BaseActiveRecord:private] => Array
                                        (
                                        )
                                    [_errors:yii\base\Model:private] => 
                                    [_validators:yii\base\Model:private] => 
                                    [_scenario:yii\base\Model:private] => default
                                    [_events:yii\base\Component:private] => Array
                                        (
                                        )
                                    [_behaviors:yii\base\Component:private] => Array
                                        (
                                        )
                                )
                        )
                )
            [_errors:yii\base\Model:private] => 
            [_validators:yii\base\Model:private] => 
            [_scenario:yii\base\Model:private] => default
            [_events:yii\base\Component:private] => Array
                (
                )
            [_behaviors:yii\base\Component:private] => Array
                (
                )
        )

Как мне из этого массива сделать выборку, что бы сначала вывело:

Сначала вопрос:
[name_quest] => Вопрос 4
[text_quest] => Текст к вопросу 4
[msg_quest] => Сообщение к вопросу 4
Потом ответы на него:
[id_rec] => 365
[id_question] => 821
[name_answer] => Второй
[text_answer] => Не правильный
[corr_answer] => 0
[id_rec] => 364
[id_question] => 821
[name_answer] => Первый
[text_answer] => Правильный
[corr_answer] => 1
Потом опять вопрос:
[id_rec] => 781
[name_quest] => Вопрос 1
[text_quest] => Текст к вопросу 1
[msg_quest] => Сообщение к вопросу 1
Потом ответы на него:
[id_rec] => 321
[id_question] => 781
[name_answer] => Простой ответ
[text_answer] => Правильный ответ
[corr_answer] => 1
[id_rec] => 361
[id_question] => 781
[name_answer] => Простой ответ
[text_answer] => Не правильный ответ
[corr_answer] => 0

Как правильно сделать выборку данных и в цикле на страницу выводить по очереди такие данные?

Модель:

// Получаем в массив $Question все записи из таблицы SQuizQuestion где id_rec = $Question_id
public function getQuestion($Question_id)
{
    $Question = SQuizQuestion::find()
        ->where(['id_rec' => $Question_id])
        ->all();
    foreach ($Question as $Quest) {
        // Получаем связанные записи из таблицы SQuizQA для каждого вопроса
        $QuestionAnswer = $Quest->squizqa;
    }
    return $Question;
}
public function getSquizqa()
{
    return $this->hasMany(SQuizQA::className(), ['id_question' => 'id_rec']);
}

Контроллер:

// Получаем в массив $Questions все записи из таблицы SQuizQuestion где id_rec = $Question_id
        $Questions = $modelTestSystem->getQuestion($Question_id);
Answer 1

Выводит либо все вопросы с ответами, либо, если передан id вопроса, то только его:

Контроллер:

public function actionQuestions($questionId = null)
{
    $query = SQuizQuestion::find()->with('squizqa');
    $questionId ? $query->where(['id_rec' => $questionId]) : null;
    return $this->render('questions', [
        'questions' => $query->all(),
    ]);
}

Во вьюшке questions:

foreach ($questions as $question) {
    echo $question->name_quest . ' : ' . $question->text_quest; // Вывод вопроса
    // Вывод ответов
    foreach (question->squizqa as $answer) {
        echo '<p>';
        echo $answer->name_answer . ' : ' . $answer->text_answer;
        echo '</p>';
    }
}
Answer 2

На выходе вы получаете ассоциативный массив, у которого ключ это Id вопроса, и два вложенных массива, это вопрос и массив ответов. Вам осталось просто правильно их вывести. Но это решение не самое правильное, я лишь дал вам результат который вы просили - это массив. Правильнее всего было бы передать $Questions в вид, и там уже правильно все это отобразить

public function getQuestion($Question_id)
{
$result = [];
$Question = SQuizQuestion::find()
    ->where(['id_rec' => $Question_id])
    ->all();
if($Question) {
    foreach ($Question as $Quest) {
        $result[$Quest->id_rec]['question'] = [
            'name_quest' => $Quest->name_quest,
            'text_quest' => $Quest->text_quest,
            'msg_quest' => $Quest->msg_quest
        ];
        if($Quest->squizqa) {
            foreach($Quest->squizqa as $answ) {
                $result[$Quest->id_rec]['answers'][] = [
                    'id_question' => $answ->id_question,
                    'name_answer' => $answ->name_answer,
                    'text_answer' => $answ->text_answer,
                    'corr_answer' => $answ->corr_answer,
                ];
            }
        }
    }
}
return $result;

}

READ ALSO
cURL вставить код перед &lt;/body&gt;

cURL вставить код перед </body>

Получаю содержимое страницы с другого сайта с помощью cURLСтолкнулся с проблемой загрузки стилей если в пути нет доменного имени, решил проблему...

252
Вызов Google App Script из PHP

Вызов Google App Script из PHP

Код вызова скрипта выглядит следующим образом

317
Сравнение скорости

Сравнение скорости

Быстрее ли этот вариант?

309
MVC и заголовок

MVC и заголовок

Доброго времени сутокРешил разобраться с MVC и тому подобному

198