У меня есть массив внутри массива, и я хочу перебрать массив, чтобы получить значения, чтобы я мог сохранить их в базе данных. Каков наилучший способ приблизиться к этому в PHP?
Массив:
Array
(
[instrument] => AUD_CAD
[granularity] => H1
[candles] => Array
(
[0] => Array
(
[complete] => 1
[volume] => 942
[time] => 2018-06-03T21:00:00.000000000Z
[bid] => Array
(
[o] => 0.97957
[h] => 0.98054
[l] => 0.97957
[c] => 0.98048
)
[mid] => Array
(
[o] => 0.98032
[h] => 0.98083
[l] => 0.98022
[c] => 0.98076
)
[ask] => Array
(
[o] => 0.98107
[h] => 0.98133
[l] => 0.98050
[c] => 0.98105
)
)
[1] => Array
(
[complete] => 1
[volume] => 888
[time] => 2018-06-03T22:00:00.000000000Z
[bid] => Array
(
[o] => 0.98048
[h] => 0.98069
[l] => 0.97972
[c] => 0.97986
)
[mid] => Array
(
[o] => 0.98077
[h] => 0.98093
[l] => 0.97989
[c] => 0.97998
)
[ask] => Array
(
[o] => 0.98106
[h] => 0.98124
[l] => 0.98000
[c] => 0.98011
)
)
)
)
Я хочу получить такие значения:
foreach ($get_instruments_candles['candles'] as $candle) {
// first array part
$instrument = $candle['instrument'];
$granularity = $candle['granularity'];
// one level deeper into the array
$complete = $candle[0]['complete'];
$volume = $candle[0]['volume'];
//another level deeper
$open = $candle[0]['mid']['o'];
$high = $candle[0]['mid']['h'];
$low = $candle[0]['mid']['l'];
$close = $candle[0]['mid']['c'];
// check if exists in db
// do a check here or insert data
echo 'insert in db ins= '. $instrument. ' gran='. $granularity .' com= '. $complete .' open =' .$open. ' high = ' . $high . ' low = ' . $low . ' close = ' . $close;
}
Этот массив может содержать, скажем, 500 [свечей] 0,1,2,3 — 500 и т. Д. Я хочу сохранить значения в переменных, чтобы я мог проверить свою базу данных, чтобы проверить, существует ли, или затем использовать значения для вставки базы данных для каждый конкретный [массив свечей] значений. time
, o
, h
, l
а также c
будучи важной частью данных.
Вы близки. Тем не менее, вы ссылаетесь на некоторые из ваших индексов массива неправильно.
Давайте разбить это на две части. Во-первых, давайте просто сконденсируем ваши данные в красивый массив, который вы позже сможете использовать для своих запросов.
Шаг 1:
foreach ($get_instruments_candles['candles'] as $candle) {
//Create an array containing just the information that you want for each item.
$newArray[] = array(
'ins' => $get_instruments_candles['instrument'],
'gran' => $get_instruments_candles['granularity'],
'com' => $candle['complete'],
'volume' => $candle['volume'],
'open' => $candle['mid']['o'],
'high' => $candle['mid']['h'],
'low' => $candle['mid']['l'],
'close' => $candle['mid']['c']
);
}
echo '<pre>';
print_r($newArray);
echo '</pre>';
Теперь у вас есть массив, содержащий только информацию, которую вы хотите для каждого элемента.
Шаг 2:
Вы должны иметь возможность иметь действительное соединение с базой данных и знать имена таблиц и столбцов. Но вот пример того, как вы будете использовать вновь созданный массив для выполнения ваших запросов.
//Here is an example of an parameterized insert query.
$query = "INSERT INTO YOURTABLE
(
ins,
gran,
com,
volume,
open,
high,
low,
close
) VALUES (?,?,?,?,?,?,?,?)";
//Use a loop and iterate across your items and execute your query for each item.
foreach($newArray as $item){
$stmt = $connection->prepare($query);
$stmt->bind_param('ssssssss', ...$item);
$stmt->execute();
}
$stmt->close();
Если вы новичок в параметризованных запросах, вам следует прочитать эту ссылку.
MySQLi Параметризованные Запросы
У них также есть один для PDO
Добавьте их в закладки и обращайтесь к ним часто. Они также покажут вам, как правильно настроить соединения с БД.
Надеюсь это поможет.
Других решений пока нет …