【问题标题】:PHP: Bootstrap, CodeIgniter - Typeahead data pulling from MySQLPHP:Bootstrap、CodeIgniter - 从 MySQL 中提取的 Typeahead 数据
【发布时间】:2023-03-08 07:23:01
【问题描述】:

我正在尝试查询 SQL 以获取用于预先输入的值数组,但我显然缺少数组的基础知识,因为它甚至没有给我提供接近我期望的结果

我想从 SQL 中仅收集不同数据的“名称”列

这是我的 MySQL 查询

$data['typeahead'] = $this->db->query('SELECT DISTINCT Name from table')->result_array();

这是它在 var_dump 上给出的输出

array(287) { 
 [0]=> array(1) { ["Name"]=> string(16) "'67 Shelby GT500" } 
 [1]=> array(1) { ["Name"]=> string(8) "Tooligan" } 
 [2]=> array(1) { ["Name"]=> string(24) "'67 Pontiac Firebird 400" } 
 [3]=> array(1) { ["Name"]=> string(17) "Volkswagen Beetle" } 
}

我唯一想做的就是用列中的数据构建一个数组。我正在为 FrameWork 使用 CodeIgniter,并将使用 Bootstrap 的 JS 来处理 typeahead,但我被困在数据数组部分。

任何帮助都将不胜感激,我找到了许多关于如何使用非 MySQL 数组作为预输入的教程,但没有一个适用于 MySQL。

^^ 解决了

立即发布:

Typeahead 没有从数组中提取数据

控制器代码:

 $name_array = $this->db->query('SELECT DISTINCT Name from table')->result_array();

 $typeahead_string = '';
 foreach ($name_array as $name)
 {
  $formatted_name    =  '"' . $name['Name'] . '", ';
  $typeahead_string .= $formatted_name;
 }

 $option_list = "[" . rtrim($typeahead_string, ", ") . "]";
 $data['typeahead'] = $option_list;

查看代码:

<input type="text" class="span3 search-query" placeholder="Search" id="typeahead" data-provide="typeahead" data-source="<?php echo $typeahead; ?>"><button type="submit" class="btn"><i class="icon-search"></i></button>

【问题讨论】:

  • 那不是数组,那是代表查询结果的对象。我对 CI 一无所知,但我确信文档解释了如何进行数据库查询。
  • @ÁlvaroG.Vicario 你是对的,我添加了 ->result_array() 现在我在一个数组中得到一个数组。我只需要弄清楚如何完全删除第一个数组
  • 您可以尝试查看row_array() 返回的内容,而不是result_array(),或者使用$newArray = $oldArray[0]; 获取您的数组数据。这只是将$oldArray 的第一个元素放入$newArray(第一个元素恰好也是一个数组)。
  • row_array 给出 1 个条目,$data['typeahead'] = $temp['0'];

标签: php mysql arrays codeigniter typeahead


【解决方案1】:

您可以遍历查询当前生成的结果并将Name 元素添加到新数组中,如下所示:

$name_array = $this->db->query('SELECT DISTINCT Name from HWC')->result_array();

$typeahead_array = array();
foreach ($name_array as $name)
{
    $typeahead_array[] = $name['Name'];
}

$data['typeahead'] = $typeahead_array;

编辑:

要在 Bootstrap 中使用 typeahead 功能,数据源可以是字符串列表,例如:"Orange", "Apple", "Banana"

您可以为$data['typeahead'] 变量分配一个作为选项列表的字符串,将其传递给视图并将其回显到相关属性。

控制器

下面的循环将创建一个字符串变量,该变量将包含预先输入的所有选项。它在每个元素周围添加引号并在末尾添加逗号 - 所以Apple 将变为"Apple",。然后它将每个元素附加到字符串中。

$name_array = $this->db->query('SELECT DISTINCT Name from HWC')->result_array();

$typeahead_string = '';
foreach ($name_array as $name)
{
    $formatted_name    =  '"' . $name['Name'] . '", ';
    $typeahead_string .= $formatted_name; 
}

$option_list = rtrim($typeahead_string, ",");  //Strips the last comma and any whitespace from the end string

$data['typeahead'] = $option_list;

查看

您在视图中的输入应该与此类似,重要的部分是选项列表的回显位置:data-source="[&lt;?php echo $typeahead; ?&gt;]"

<input type="text" data-provide="typeahead" data-items="4" data-source="[<?php echo $typeahead; ?>]">

希望这会有所帮助!

【讨论】:

  • 完美!现在我只需要弄清楚如何使数组变量与 typeahead 一起工作。有什么想法吗?
  • 嗨,@AndrewWilson,我已经更新了我的答案,所以它现在应该可以与 Bootstrap 的 typeahead 一起使用。
  • 我得到消息:内爆():传递的参数无效
  • 糟糕,改用rtrim($typeahead_string, ",")(如上面的编辑所示)应该可以工作。
  • 使用 rtrim($typeahead_string, ", ") 的数组看起来是正确的,但它仍然不能正确地从 typeahead 调用
【解决方案2】:

仍然不适合我。当我检查元素时,像这样的数据 " uncategories","php" 。什么意思是第一个总是痉挛。

找到了方法,而不是使用这个$formatted_name = '"' . $name['Name'] . '", '; 只需更改为$formatted_name = '&amp;quot;' . $name['Name'] . '&amp;quot;, ';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2017-07-21
    • 1970-01-01
    • 2021-05-26
    • 2018-06-30
    相关资源
    最近更新 更多