Использование foreach с переменными в Smarty

1

В настоящее время у меня есть код, который соответствует данным БД для данных массива и выводит данные из массива, который соответствует идентификатору службы.

$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"
    }
  • 0
    Во втором цикле smarty foreach вы ссылаетесь на from=$more_data однако я не вижу, где определяется $ more_data в предоставленном вами коде?
  • 0
    Сожалею. Я изменил переменные, когда разместил здесь, и перепутал это. Это исправлено как data_grab1
Показать ещё 4 комментария
Теги:
arrays
foreach
smarty

1 ответ

0
Лучший ответ

Вы можете добавить $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 чтобы увидеть структуру и изменить код по мере необходимости.

  • 0
    Это сделало это прямо там! Спасибо! Единственное, что в Smarty, я должен был {foreach key=key item=more_data from=$data['detailed_info'].more_data} потому что массив $data_grab1 имеет ['detailed_info'] $data_grab1 ['detailed_info'] перед массивом. Пока я добавляю ['detailed_info'] в Smarty, он работает просто отлично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню