0

我试图根据是否有要打印的信息来限制打印出哪些字母。IE 如果没有“Y”条目,那么列表中不应该有“Y”。下面是我拥有的可以正常进行过滤的代码。它向服务器提交一个调用,该服务器只响应以提交的信件开头的条目。

  // contextual filter list 
  $filters['contextual'] = array(
    '#attributes' => array(
        'class' => array('contextual_filter_list'),
        ),
    '#type' => 'container',
    );
  $alphabets = range('A', 'Z',);
  foreach ($alphabets as $value) {
    $filters['contextual'][$value] = array(
    '#attributes' => array(
        'class' => array('contextual_letter'),
        ),
    '#type' => 'submit',
    '#value' => $value,
    '#title' => t($value),
    '#submit' => $value, 
    '#name' => 'Select',
    );
  }

// GET company list for A-Z filter bar
  $value = $_GET["Select"];

  $qry = db_select('cloud_computing_capability_data', 'cd');
  $qry -> fields('cd', cloud_computing_data_company::db_fields());

  // condition to query all or a single letter for companies
  if ($value != 'View All'){
    $qry -> condition('company',$value.'%','LIKE');
    };

它打印出这个:

A | B | C | D | E | F | G |......

我需要它打印出来

 A | B | C | F | G |......

如果没有“D”和“E”的条目

4

2 回答 2

0

也许您可以调整您的数据库查询以仅返回您想要的字母,或者您可以始终使用array_filter并忽略没有值的条目。

$result = array_filter($filters['contextual']);
print_r($result);

或者也许围绕这条线的东西

$result = array_filter($filters['contextual'], function($a){
    return !empty($a['the_key_you_need_to_check']);
});
print_r($result);
于 2013-05-30T14:37:57.333 回答
0

您将不得不查询数据库。由于我不知道您的数据库结构或您正在使用的框架,因此我将编写简单的 sql 查询来执行此操作。

SELECT DISTINCT(main_letter) 
FROM `the_table`
WHERE 1 -- add your conditions here, if any
ORDER BY main_letter ASC

您还可以从子字符串中获取主字母。它看起来像这样:

SELECT DISTINCT(LEFT(name, 1))
-- rest of query

祝你好运 !

您可以将此查询调整为您正在使用的 ORM。

于 2013-05-30T14:33:23.840 回答