Разница между присваиванием и array_push в PHP в цикле foreach - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь понять разницу между push массива и присвоением значения массиву со знаком равенства в цикле foreach.

Вот моя проблема:

$data['database'] = array();

        if ($sql->num_rows() > 0)
        {
            foreach($sql->result_array() as $row)
            {   
                $data['database'] = $row;
                // array_push($data['database'], $row);
                var_dump($data['database']);
            }
        }

        die();

Давайтепредставьте, что до этого я делал запрос к базе данных, что-то в строке этого: $ sql = ee () -> db-> select ('*') -> from ('exp_credit_tracker_assoc') -> get ();так как я использую expressionengine, но на самом деле любое подготовленное утверждение хорошо.

Теперь, если я использую оператор комментария

array_push($data['database'], $row);

Это фактически отправляет мое значение в мой массив $ data ['database '], поэтому, когда я выгружаю свой массив за пределы цикла foreach, я вижу все значения.

Вместо того, чтобы назначать только значение:

$data['database'] = $row;

, я могу видеть толькомассив внутри моего цикла, и, если я выгружаю свой массив за пределы цикла, я вижу только свою первую строку.Что очень странно, потому что где-то в моем коде есть подобный цикл, который делает прямо противоположное, только присваивая значение:

$sql = ee()->db->select('*')->from('exp_credit_tracker_credit_type')->get();

        $credit_type = array();

        foreach ($sql->result() as $row) {
            $credit_type[$row->credit_name]=$row->credit_name;
        }

Мне нужно использовать синтаксис присваивания, так как я хочу присвоить некоторые значениякакая-то другая переменная на лету, как только я делаю запрос с MySQL, мне стало интересно, ошибаюсь ли я.

1 Ответ

0 голосов
/ 11 мая 2018

Если вы хотите использовать присвоение, но видите те же результаты, что и array_push() за пределами цикла, вам необходимо назначить элемент в качестве нового элемента в массиве с помощью:

$data['database'][] = $row;

Это должно привести к тем же результатам, что и:

array_push($data['database'], $row);

То, как вы это написали $data['database'] перезаписывается на $row.

...