【发布时间】:2015-03-22 22:28:38
【问题描述】:
我在尝试做一些我认为应该很简单的事情时遇到了最困难的事情。我已经阅读了许多有关访问 PHP JSON 数组的示例,但我似乎找不到适合我的用例的示例(或者我不明白这些部分是如何适合的)。
这是我在 PHP 中的 JSON (example_data.php):
<?php
$contents = array(
1 => array(
'contentid' => '1',
'full' => 'Song Name by Artist Name (maininfo)',
'aname' => 'Artist Name',
'sname' => 'Song Name',
'main' => 'core content #1',
'maininfo' => 'url'
),
2 => array(
'contentid' => '2',
'full' => 'Song Name by Artist Name (maininfo)',
'aname' => 'Artist Name',
'sname' => 'Song Name',
'main' => 'core content #2',
'maininfo' => 'url')
);
?>
下面的代码将搜索变量 (q) 作为输入,并将其传递给 JSON 以搜索部分或完整匹配项。
<?php
$q = $_GET['q'];
include('example_data.php');
$results = array('contents' => array());
foreach ($contents as $name => $data)
{
if (stripos($name, $q) !== false)
{
$results['contents'][$name] = $data;
}
}
$final_contents = array('header' => array(), 'data' => array());
$final_contents['header'] = array('title' => 'Music', 'num' => count($results['contents']), 'limit' => 6);
foreach ($results['contents'] as $name => $data)
{
$final_contents['data'][] = array('primary' => $data['sname'], 'secondary' => $data['aname']);
}
/* Output JSON */
$final = array($final_contents);
header('Content-type: application/json');
echo json_encode($final);
die();
?>
它工作正常,但它只会搜索数组名称(在本例中为“1”或“2”)以查找匹配项。显然,用户不会搜索“1”,而是会搜索“艺术家姓名”或“歌曲名称”或核心内容。
有人能告诉我如何修改此代码以获取“q”并将其用作专门针对“完整”键的搜索——如果 ' 的值存在部分/完整匹配full',我想将它作为 JSON 返回(包括 aname、sname、main、maininfo 等)。预期会有多个结果。 JSON 现在按预期返回,但用户不会搜索“1”、“2”等,因此它不是真正可用的。
提前感谢您的宝贵时间!
【问题讨论】:
-
您大概想匹配内容(值)?您的循环正在将数字键 1 和 2 与搜索词进行比较,您需要一个额外的循环。如果要匹配值而不是键,则需要将
stripos()更改为$data而不是$name- 例如:eval.in/303046 -
这非常有效@scrowler - 它似乎匹配任何值。我可以将其限制为仅偶然搜索“完整”吗?现在,如果您搜索“核心”(例如),它会在“主”键中查找内容。我希望它只搜索一个特定的键(“完整”)。这实际上已经解决了,非常感谢。
-
@scrowler - 这真的很好,但它匹配所有东西,它带回了一些我不想要的东西。是否可以简单地匹配“完整”键中的值。非常感谢任何帮助!
-
是的,在这种情况下你想使用
if (stripos($data['full'], $q) !== false) -
@scrowler - 你真的可以提交这个作为答案吗?这是完美的,最接近我原来的问题。库尔特在下面提供了一些非常好的答案,但是它们是出于我的目的而过度设计的。 非常感谢您的帮助--简直不敢相信我花了这么多时间,而且这么简单。