Я пытаюсь понять разницу между 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, мне было интересно, если я делаю ошибку.
Если вы хотите использовать назначение, но видите те же результаты, что и array_push()
вне вашего цикла, вам нужно назначить элемент как новый элемент в массиве через:
$data['database'][] = $row;
Это должно привести к тем же результатам, что и:
array_push($data['database'], $row);
То, как вы это написали $data['database']
перезаписывается $row
,
Других решений пока нет …