【问题标题】:PHP Array Differences - Generated by Loop vs String Comma-SeparatedPHP 数组差异 - 由循环生成与字符串逗号分隔
【发布时间】:2011-09-16 10:06:56
【问题描述】:

我正在使用 jQuery Autocomplete (http://code.google.com/p/jquery-autocomplete/) 并且在使用 MySQL 调用生成的数组时遇到了一些问题。在 PHP 中使用字符串创建数组与在循环中创建数组之间有根本区别吗?

例如,如果我像示例中那样使用字符串创建数组,则一切正常。即:

$items = array(
    "Great Bittern" => "Botaurus stellaris",
    "Little Grebe" => "Tachybaptus ruficollis")

当我如下创建数组时,似乎无法识别数组,或者数组中的数据不可搜索:

$items = array();
$query = mysql_query("MY QUERY");
while ($row = mysql_fetch_array($query))
{
array_push($data, $row['name']);
}

是不是因为 MySQL 调用是在包含它的 php 文件被加载之后进行的?我已经尝试了很多很多在循环中创建数组的变体,但都没有奏效。

在此先感谢您提供任何建议或提示。把我的头发拉到这个上面!

【问题讨论】:

  • 除了第一个是关联数组,第二个是数字之外,在第二个示例中,您没有附加到$items。如果你做得对,那么“普通”数组和循环填充的数组没有区别。

标签: php javascript jquery mysql arrays


【解决方案1】:

你的两个例子做了根本不同的事情。

在第一个示例中,您拥有大多数语言所称的“散列”或“映射”;将一个字符串映射到另一个字符串的一系列键/值对。 “Great Bittern”是关键,“Botaurus stellaris”是对应的值。

在第二个中,您有一个更传统的带有顺序键的数字索引数组。没有什么可以阻止您按照第一个示例中的方式创建映射,您只需要显式指定字符串键而不是使用array_push。如果您的查询返回两个关联的值,您可以执行类似

$data[$row['key']] = $row['value'];

您使用哪种方法取决于您的 jQuery 插件期望接收的数据类型。它需要一个键/值映射,还是一个值数组?

【讨论】:

  • @dwarbi 正如我在示例中所说,您只需使用$data[$new_key] = $new_value 为新键分配一个新值。如果您没有特定的密钥,则只需使用array_push。重要的问题是,您需要为 jQuery 插件提供哪种形式的数组?
  • 谢谢你 - 我确实意识到我的后续评论很愚蠢。
  • 所以,我也尝试过这个:在我的循环中,我添加了: $items[$row['cityId']] = $row['name'];当我 print_r 数组时,数据的格式与示例中给出的数组相同。这不应该是一个哈希/映射数组吗?这是 jQuery 插件所期望的。这就是为什么我认为这可能与页面/包含加载的顺序有关。
  • @dwarbi 你是如何将数据提供给 jQuery 插件的?您必须以 json 或 xml 或其他编码输出它,这再次取决于插件的期望。
  • 有效的示例数据未编码(据我所知) - 只是一个数组。但我明白你的说法,似乎必须如此。我所做的只是用我的 MySQL 调用替换示例创建的数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 2023-03-29
  • 2021-09-19
相关资源
最近更新 更多