Вы зацикливаетесь столько раз, сколько индексов в вашем самом большом массиве, НО вы не используете $key
и $value
. Ваш код точно делает то, что вы сказали ему сделать:
- для каждого значения -> 13 циклов
- получить значение
$array['location']
- вставить его в базу данных
- конец вашего foreach
Если вы просто хотите вставить $array['locations']
, почему вы используете foreach
?
Вы вставляете только одно значение и знаете, что это индекс, поэтому вам не нужно использовать foreach
С foreach
вы можете сделать:
$array = json_decode($result, true);
foreach($array as $key=>$value) {
if ($key === "location")
{
//$hostname = $array['locations'];
$hostname = $value;
$stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
$stmt->bind_param("s", $hostname);
$stmt->execute();
$stmt->close();
}
}
Но в этом нет реальной необходимости.
Я бы еще написал так:
$array = json_decode($result, true);
$hostname = $array['location'];
$stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
$stmt->bind_param("s", $hostname);
$stmt->execute();
$stmt->close();
[EDIT]
Если вы хотите выполнить цикл для вставки различных элементов вашего массива, вы должны использовать переменные $key
и $value
.
$array = json_decode($result, true);
foreach($array as $key=>$value) {
if ($key === "location")
{
$hostname = $value; //contains $array['location']
$stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
$stmt->bind_param("s", $hostname);
$stmt->execute();
$stmt->close();
} else if ($key === 'device_id')
{
$devide_id= $value; //contains $array['device_id']
$stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
$stmt->bind_param("s", $devide_id);
$stmt->execute();
$stmt->close();
} else if ($key === 'device_id')
{
$devide_id= $value; //contains $array['device_id']
$stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
$stmt->bind_param("s", $devide_id);
$stmt->execute();
$stmt->close();
} else if ($key === 'device_id')
{
$devide_id= $value; //contains $array['device_id']
$stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
$stmt->bind_param("s", $devide_id);
$stmt->execute();
$stmt->close();
} else if ($key === 'device_id')
{
$devide_id= $value; //contains $array['device_id']
$stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
$stmt->bind_param("s", $devide_id);
$stmt->execute();
$stmt->close();
} else if ($key === '...')
{
//etc
}
}
Но если вы точно знаете ключи ваших значений в вашем массиве, я бы сделал это примерно так:
$hostname = $array['location'];
$devide_id = $array['device_id'];
$stmt = $mysqli->prepare("INSERT INTO test (Hostname) VALUES (?)");
$stmt->bind_param("s", $hostname);
$stmt->execute();
$stmt = $mysqli->prepare("INSERT INTO test (DeviceId) VALUES (?)");
$stmt->bind_param("s", $devide_id);
$stmt->execute();
$stmt->close();