我有一个foreach循环,循环播放最近的游戏,在该循环中,我想显示每个游戏的数据。每个游戏我必须处理的阵列(或阵列的一部分)如下:
"array": [
{
"statType": "TOTAL_TIME_SPENT_DEAD",
"dataVersion": 0,
"value": 636,
"futureData": null
},
{
"statType": "MAGIC_DAMAGE_DEALT_PLAYER",
"dataVersion": 0,
"value": 156407,
"futureData": null
},
{
"statType": "ITEM1",
"dataVersion": 0,
"value": 3040,
"futureData": null
},
{
"statType": "MINIONS_KILLED",
"dataVersion": 0,
"value": 186,
"futureData": null
},
我想要的是回显特定“statType”的值。举个例子,我希望echo的值为“MINIONS_KILLED”而忽略其余的。但是“MINIONS_KILLED”的位置几乎可以在数组中的任何位置,因此使用数组[4]将无法工作,因为它可以在不同的游戏中使用数组[13]。
我该如何解决这个问题?
到目前为止我能够做的是使用下面的代码回显每个statType和值。 “$ data”指的是上面粘贴的数组。但是相当多的数据是无关紧要的,我宁愿忽略它。
<ul>
<?php foreach($data as $Property) { ?>
<li><?php echo $data[$Property->statType] = $Property->statType; ?> : <?php echo $data[$Property->statType] = $Property->value; ?></li>
<?php }; ?>
</ul>
初学者对php的亲切问候。
答案 0 :(得分:0)
function get_stat_index($data, $type) {
for($i = 0; $i < count($data); $i++) {
if($data[$i]->statType === $type) return $i;
}
return -1;
}
然后您可以像这样使用它:
$index = get_stat_index($data, 'MINIONS_KILLED');
echo $data[$index]->value;
如果没有找到这样的条目, index
可能为-1。
答案 1 :(得分:0)
如果你已经知道你要去echo
,那么搜索数组是没有意义的。如果您正在尝试搜索数组并检查它是否存在于数组中,那么您可以使用以下函数:
function array_multi_search($needle, $haystack)
{
foreach ($haystack as $key => $data) {
if(in_array($needle, $data, TRUE)) return true;
}
return false;
}
可以像下面这样使用:
$exists = array_multi_search('MINIONS_KILLED', $data);
var_dump($exists); // bool(true)
如果您正在尝试查找包含搜索词的子数组,则可以将array_filter()
与自定义回调函数一起使用,如下所示:
$result = array_filter($data, function($item) {
return ($item['statType'] == 'MINIONS_KILLED';
});
print_r($result);
这将输出如下内容:
Array
(
[3] => Array
(
[statType] => MINIONS_KILLED
[dataVersion] => 0
[value] => 186
[futureData] =>
)
)