Разница между присваиванием и array_push в PHP в цикле foreach

Я пытаюсь понять разницу между 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

Решение

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

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

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

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

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector