В настоящее время у меня есть код, который соответствует данным БД для данных массива и выводит данные из массива, который соответствует идентификатору службы.
$get = $pdo->prepare("SELECT data FROM table WHERE serviceid=:serviceid");
$get->bindParam(':serviceid', $serviceid, PDO::PARAM_STR);
$get->execute();
$result = $get->fetchAll();
$search_values = array();
$wanted_data = array();
foreach($result as $row) {
$search_values[] = $row['data'];
}
foreach($data_bits as $key => $value) {
if (in_array($value['data'], $search_values)) {
$wanted_data[] = $data_bits[$key];
}
}
Мой следующий шаг - использовать возвращаемые данные и получить из него новый массив. Я работаю с json API. Ниже приведено то, что у меня есть, но оно не работает, но если я var_dump
он вернет все правильные данные. Я просто не могу заставить его выглядеть правильно на странице Smarty.
foreach($wanted_data as $more_data) {
$ch_r = curl_init("https://api.url.com/data/".$more_data['name']."/info");
curl_setopt($ch_r, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_r, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer KEY REMOVED',
'Content-Type: application/json')
);
$data_grab = curl_exec($ch_r);
$data_grab = json_decode($data_grab, true);
foreach ($data_grab['detailed_info'] as $data_key2 => $data) {
$data_grab1 = $data_grab['detailed_info'][$data_key2];
}
}
Опять же, если я echo var_dump(data_grab1);
он выведет все записи, необходимые для каждого $more_data['name']
, но на выходе Smarty это не так. Ниже приводится Smarty:
{foreach key=key item=data from=$wanted_data}
{foreach key=key item=more_data from=$data_grab1}
{if $more_data.info_3 neq 'SN'}
<tr><td>{$data.name}</td><td>{$more_data.info_6}</td><td>{$more_data.name}</td><td>{$more_data.info_3}</td><td>{$more_data.info_4}</td></tr>
{/if}
{/foreach}
{/foreach}
Как заставить Smarty правильно выводить данные?
EDIT: Вероятно, я должен добавить, что шаблон шаблона Smarty foreach
{$data.name}
возвращает информацию просто отлично. Это другие элементы таблицы, использующие данные из второго foreach
которые не работают.
var_dump(data_grab1)
['detailed_info'] =>
array(7) {
["info_4"]=>
int(10243591)
["info_3"]=>
string(2) "SN"
["name"]=>
string(1) "SD"
["info_6"]=>
string(20) "Some data"
}
array(7) {
["info_4"]=>
int(10243592)
["info_3"]=>
string(2) "SN"
["name"]=>
string(1) "SM"
["info_6"]=>
string(20) "Some more data"
}
array(7) {
["info_4"]=>
int(10243593)
["info_3"]=>
string(2) "SN"
["name"]=>
string(1) "NO"
["info_6"]=>
string(20) "Some tiny data"
}
array(7) {
["info_4"]=>
int(10243594)
["info_3"]=>
string(1) "HE"
["name"]=>
string(1) "DB"
["info_6"]=>
string(14) "BOLD data"
}
array(7) {
["info_4"]=>
int(10243608)
["info_3"]=>
string(1) "HE"
["name"]=>
string(18) "a hair of data"
["info_6"]=>
string(7) "bold"
}
Вы можете добавить $more_data
в исходный массив, чтобы он был правильно связан.
В приведенном ниже я добавил $key
в цикле foreach, а затем ссылался на $key
$wanted_data
массиве $wanted_data
чтобы установить данные, которые вы извлекаете из curl_exec
в существующие данные.
foreach($wanted_data as $key => $more_data) {
$ch_r = curl_init("https://api.url.com/data/".$more_data['name']."/info");
curl_setopt($ch_r, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_r, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer KEY REMOVED',
'Content-Type: application/json')
);
$data_grab = curl_exec($ch_r);
$wanted_data[$key]['more_data'] = json_decode($data_grab, true);
}
Затем в шаблоне Smarty вы можете запустить второй цикл foreach на этом массиве
{foreach key=key item=data from=$wanted_data}
{foreach key=key item=more_data from=$data.more_data}
{if $more_data.info_3 neq 'SN'}
<tr><td>{$data.name}</td><td>{$more_data.info_6}</td><td>{$more_data.name}</td><td>{$more_data.info_3}</td><td>{$more_data.info_4}</td></tr>
{/if}
{/foreach}
{/foreach}
Примечание. Я сделал некоторые предположения о структуре ваших данных и том, что исходит от вашего curl_exec
. Возможно, вам придется выводить данные с помощью print_r
или var_dump
чтобы увидеть структуру и изменить код по мере необходимости.
{foreach key=key item=more_data from=$data['detailed_info'].more_data}
потому что массив $data_grab1
имеет ['detailed_info']
$data_grab1
['detailed_info']
перед массивом. Пока я добавляю ['detailed_info']
в Smarty, он работает просто отлично.
from=$more_data
однако я не вижу, где определяется $ more_data в предоставленном вами коде?data_grab1