在 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_rvar_dump 输出数据以查看结构并根据需要修改代码。