在 Smarty 上使用带有变量的 foreach
Using foreach With Variables on Smarty
目前,我有一些代码将数据库数据与数组数据相匹配,并将数据从与服务 ID 相匹配的数组中提取出来。
$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
它 returns 所有正确的数据。我只是无法让它在 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正确输出数据?
编辑:
我应该补充一点,Smarty 模板 foreach
循环 {$data.name}
returns 信息就好了。其他 table 项使用第二个 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
添加到原始数组,以便它正确关联。
在下面,我在 foreach 循环中添加了 $key
,然后在 $wanted_data
数组中引用了 $key
来设置从 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
输出数据以查看结构并根据需要修改代码。
目前,我有一些代码将数据库数据与数组数据相匹配,并将数据从与服务 ID 相匹配的数组中提取出来。
$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
它 returns 所有正确的数据。我只是无法让它在 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正确输出数据?
编辑:
我应该补充一点,Smarty 模板 foreach
循环 {$data.name}
returns 信息就好了。其他 table 项使用第二个 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
添加到原始数组,以便它正确关联。
在下面,我在 foreach 循环中添加了 $key
,然后在 $wanted_data
数组中引用了 $key
来设置从 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
输出数据以查看结构并根据需要修改代码。