【发布时间】:2013-05-28 03:08:31
【问题描述】:
Q:如何在海量多维数组中查找单值,并返回父数组?
我有这个巨大的 json,它代表了《魔兽世界》中的所有成就。
http://us.battle.net/api/wow/data/character/achievements
我使用 json_decode 将其转换为数组。这给我留下了一个非常庞大的数组,我需要搜索它的所有级别,直到找到一个特定的值,然后我需要返回该值的父数组。
例如:
这是解码数组的一小部分。
[0] => Array
(
[id] => 7385
[title] => Pub Crawl
[points] => 10
[description] => Complete the Brewmaster scenario achievements listed below.
[reward] => Reward: Honorary Brewmaster Keg
[rewardItems] => Array
(
[0] => Array
(
[id] => 87528
[name] => Honorary Brewmaster Keg
[icon] => inv_holiday_brewfestbuff_01
[quality] => 3
[itemLevel] => 90
[tooltipParams] => Array
(
)
[stats] => Array
(
)
[armor] => 0
)
)
[icon] => inv_misc_archaeology_vrykuldrinkinghorn
[criteria] => Array
(
[0] => Array
(
[id] => 20680
[description] => Spell No Evil
[orderIndex] => 0
[max] => 1
)
[1] => Array
(
[id] => 20681
[description] => Yaungolian Barbecue
[orderIndex] => 1
[max] => 1
)
[2] => Array
(
[id] => 20682
[description] => Binan Village All-Star
[orderIndex] => 2
[max] => 1
)
[3] => Array
(
[id] => 20683
[description] => The Keg Runner
[orderIndex] => 3
[max] => 1
)
[4] => Array
(
[id] => 20684
[description] => Monkey in the Middle
[orderIndex] => 4
[max] => 1
)
[5] => Array
(
[id] => 20685
[description] => Monkey See, Monkey Kill
[orderIndex] => 5
[max] => 1
)
[6] => Array
(
[id] => 20686
[description] => Don't Shake the Keg
[orderIndex] => 6
[max] => 1
)
[7] => Array
(
[id] => 20687
[description] => Party of Six
[orderIndex] => 7
[max] => 1
)
[8] => Array
(
[id] => 20688
[description] => The Perfect Pour
[orderIndex] => 8
[max] => 1
)
[9] => Array
( re
[id] => 20689
[description] => Save it for Later
[orderIndex] => 9
[max] => 1
)
[10] => Array
(
[id] => 20690
[description] => Perfect Delivery
[orderIndex] => 10
[max] => 1
)
)
[accountWide] =>
[factionId] => 2
)
我正在尝试创建一个函数,我只需输入成就 ID,在此示例中为 7385,并返回 [0] => Array (...); 的父数组,这样我就可以获取成就详细信息从那个数组。
我不确定这是否真的是一个正确的问题,因为我不确定从哪里开始。
到目前为止,我刚刚开始将原始海量数组分解为 10 个同样庞大的类别,然后单独搜索它们,但我希望能够只搜索一次主数组,而不是搜索每个类别数组个人。
例如:
$allAchieves = file_get_contents('http://us.battle.net/api/wow/data/character/achievements');
$allAchieves = json_decode($allAchieves, true);
$generalAchieves = $allAchieves[achievements][0][achievements];
$quests = $allAchieves[achievements][1][categories];
$explorationAchieves = $allAchieves[achievements][2][categories];
$pvp = $allAchieves[achievements][3][categories];
$dungeonAndRaids = $allAchieves[achievements][4][categories];
$professions = $allAchieves[achievements][5][categories];
$reputation = $allAchieves[achievements][6][categories];
$scenarios = $allAchieves[achievements][7][categories];
$worldEvents = $allAchieves[achievements][8][categories];
$petbattle = $allAchieves[achievements][9][categories];
$featsOfStrength = $allAchieves[achievements][10][categories];
希望有人能提供帮助,因为到目前为止我在数组搜索方面看到的其他线程似乎太简单了,无法提供任何帮助,因为他们处理的数组与我在这里的数组大小无关。
【问题讨论】:
-
看来你会经常使用这个信息,所以你不必每次搜索都去获取它;相反,您可以在服务器上缓存“扁平化”副本(即
{<id>:{"id":...},<id>:{"id":...}}),然后搜索该副本。