如何在php数组中查找并回显一个值

时间:2013-12-02 17:17:57

标签: php arrays

我有一个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的亲切问候。

2 个答案:

答案 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] => 
        )

)