Когда вы присваиваете значение массиву, вы используете синтаксис $arr[key] = $value
.Если вы опустите ключ во время назначения, $value
будет назначен следующему доступному целочисленному ключу массива, начиная с 0. Это пример того, как он работает:
$arr = array();
$arr[] = 'one';//Empty, so insert at 0 [0=>'one']
$arr[] = 'two';//Last element at 0, so use 1 [0=>'one',1=>'two']
$arr[6]= 'three';//Key is used, so use key [0=>'one',1=>'two',6=>'three']
$arr[] = 'four';//Max used integer key is 6, so use 7
print_r($arr);//[0=>'one',1=>'two',6=>'three',7=>'four']
Итак, когдав вашем коде вы используете
$testing[] = array(
$rs['name'] => array(
'ip'=> $rs['ip'],
'port'=> $rs['port'],
'hosting'=> $rs['hosting']
)
);
Вы присваиваете вновь созданный массив позициям 0,1,2, .. N.
Чтобы избежать этого, просто явно укажите ключИспользуя значение, которое вы действительно хотите, например,
$testing['name'] => array(
'ip'=> $rs['ip'],
'port'=> $rs['port'],
'hosting'=> $rs['hosting']
);
Подробнее о массивах можно прочитать в документации
Примечание Если вы неНе говоря уже о наличии дополнительного столбца в сгенерированных массивах, вы можете полностью переписать свой код следующим образом:
$query ="SELECT name, ip, port, hosting FROM sites";
$results = $conn->query($query)->fetchAll(PDO::FETCH_ASSOC);
$testing = array_column($results,null,'name');
Это немного медленнее, но, на мой взгляд, очень удобно, PDOStatement::fetchAll
извлекает все данные сразуи array_column
с использованием null
в качестве второго параметра переиндексирует массив с нужным столбцом в качестве ключа.