У меня есть ассоциативный массив, который назначен умному шаблону. Там я не понимаю, как получить доступ к одному конкретному ключу. Я исследовал об этом, но не мог получить конкретное решение. Сценарий следующий:
Мой массив php с именем $all_class_subjects
выглядит следующим образом:
Array
(
[0] => Array
(
[class_id] => 1
[class_name] => I
[I] => Array
(
[cs_map_id] =>
[cs_class_id] =>
[cs_subject_id] =>
[subjects] =>
)
)
[1] => Array
(
[class_id] => 2
[class_name] => II
[II] => Array
(
[cs_map_id] =>
[cs_class_id] =>
[cs_subject_id] =>
[subjects] =>
)
)
[2] => Array
(
[class_id] => 3
[class_name] => III
[III] => Array
(
[cs_map_id] =>
[cs_class_id] =>
[cs_subject_id] =>
[subjects] =>
)
)
[3] => Array
(
[class_id] => 4
[class_name] => IV
[IV] => Array
(
[cs_map_id] =>
[cs_class_id] =>
[cs_subject_id] =>
[subjects] =>
)
)
[4] => Array
(
[class_id] => 5
[class_name] => V
[V] => Array
(
[cs_map_id] => 1
[cs_class_id] => 5
[cs_subject_id] => 3
[subjects] => Array
(
[subject_name] => Mathematics
)
)
)
[5] => Array
(
[class_id] => 6
[class_name] => VI
[VI] => Array
(
[cs_map_id] => 2
[cs_class_id] => 6
[cs_subject_id] => 4
[subjects] => Array
(
[subject_name] => Biology
)
)
)
)
Теперь я хочу распечатать значения из этого массива в умном шаблоне. Фрагмент кода приведен ниже. Он может содержать несколько ошибок HTML:
{if $all_class_subjects}
{foreach from=$all_class_subjects item=class_subject_data}
<tr>
<td width="20%">{$class_subject_data.class_name|capitalize}</td>
<td width="40%">
{foreach from=class_subject_data item=subject}
{if $subject.cls_sub_subject_name}
{$class_subject_data.cs_subject_id}
Мой вопрос: я хочу проверить, является ли массив
[I] => Array
(
[cs_map_id] =>
[cs_class_id] =>
[cs_subject_id] =>
[subjects] =>
)
пусто или нет. Вы можете видеть, кроме двух последних элементов, что все элементы массива имеют эти поля пустыми. Короче говоря, мой вопрос заключается в том, как получить доступ к внутреннему массиву, содержащему вышеуказанные поля, поскольку индекс массива, т.е. ключ (I, II, III, IV и т. д.), меняется? Функция PHP, которая возвращает массив, выглядит следующим образом:
function GetAllClassSubjects( $cur_page, $sort_col_id, $desc_or_asc, $request) {
global $grid;
$grid->mSqlArr['fields'] = " classes.class_id, classes.class_name" ;
$grid->mSqlArr['tables'] = TBL_CLASSES." AS classes ";
$grid->mSqlArr['orderby'] = "classes.class_order";
$grid->mSqlArr['where'] = "";
$grid->mCurPage = $cur_page;
$grid->mRecPerPage = REC_PER_PAGE; //default is 20
$grid->mSortColumns->mColsArr = array('class_id');
$grid->mSortColumns->mDefaultOrderStr = "";
$grid->mSortColumns->mCurColNo = $sort_col_id;
$grid->mSortColumns->mCurSortOrder = "DESC";
$class_data = $grid->GetData();
//print_p($class_data);
$grid->mSqlArr['fields'] = " class_subject_mapping.cs_map_id, class_subject_mapping.cs_class_id, class_subject_mapping.cs_subject_id" ;
$grid->mSqlArr['tables'] = TBL_CLASS_SUBJECT_MAPPING." AS class_subject_mapping ";
$grid->mSqlArr['orderby'] = "";
$grid->mSqlArr['where'] = "";
$grid->mCurPage = $cur_page;
$grid->mRecPerPage = REC_PER_PAGE; //default is 20
$grid->mSortColumns->mColsArr = array('cs_map_id');
$grid->mSortColumns->mDefaultOrderStr = "";
$grid->mSortColumns->mCurColNo = $sort_col_id;
$grid->mSortColumns->mCurSortOrder = "DESC";
$mapping_data = $grid->GetData();
//print_p($mapping_data);
foreach($class_data as $class)
{
$flag = 0;
$class_id = $class['class_id'];
$class_name = $class['class_name'];
foreach($mapping_data as $class_subject)
{
$cs_map_id = $class_subject['cs_map_id'];
$cs_class_id = $class_subject['cs_class_id'];
$cs_subject_id = $class_subject['cs_subject_id'];
if($class_id == $cs_class_id)
{
$flag = 1;
$class_data[$class_id-1][$class_name]['cs_map_id'] = $cs_map_id;
$class_data[$class_id-1][$class_name]['cs_class_id'] = $cs_class_id;
$class_data[$class_id-1][$class_name]['cs_subject_id'] = $cs_subject_id;
$sql = " SELECT subject_name";
$sql .= " FROM ".TBL_SUBJECTS." AS subjects";
$sql .= " WHERE subjects.subject_id = ".$cs_subject_id;
$sql .= " order by subject_order";
$this->mDb->Query( $sql);
$class_subjects_data = $this->mDb->FetchArray();
//print_p($class_subjects_data);
foreach($class_subjects_data as $sub)
{
$class_data[$class_id-1][$class_name]['subjects'] = $sub;
}
}
}
if($flag == 0)
{
$class_data[$class_id-1][$class_name]['cs_map_id'] = "";
$class_data[$class_id-1][$class_name]['cs_class_id'] = "";
$class_data[$class_id-1][$class_name]['cs_subject_id'] = "";
$class_data[$class_id-1][$class_name]['subjects'] = "";
}
}
print_p($class_data);
//ksort($cls_sub_data[$cs_map_id]);
//print_p($cls_sub_data);
list( $sort_url_param, $sort_col_array, $pagination_array ) =
$grid->GetUrlParam( PAGE_OFFSET, PHP_SELF."?op=".$query_string."&", "col", 'order', 'page' );
return array($class_data, $sort_url_param, $sort_col_array, $pagination_array );
}
Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.
key
массива, который вам нужно проверить, вместо того, чтобы сохранять его статичным и использоватьclass_name
для всего, для чего вам может понадобиться римская цифра в smarty? - person Jon   schedule 15.04.2013{if}{/if}
структуру вашего смарт-кода? - person Ejaz   schedule 15.04.2013