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

データベースにクエリを実行する必要があります。あなたのデータベース構造や使用しているフレームワークがわからないので、これを行うための単純な 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 に答える
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 に答える