Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从查询中计算多个值_Php - Fatal编程技术网

Php 从查询中计算多个值

Php 从查询中计算多个值,php,Php,我正在从数据库中获取这种类型的数组:(我无法更改接收到的数据类型,因为它来自外部源) 我输入一个json对象值“locality”,并计算有多少个“locality”相等,例如: foreach ($results as $result) { $source = $result->getSource(); $locality = $source['locality']['locality']; $dataLocality[] = array( 'ty

我正在从数据库中获取这种类型的数组:(我无法更改接收到的数据类型,因为它来自外部源)

我输入一个json对象值“locality”,并计算有多少个“locality”相等,例如:

foreach ($results as $result) {
    $source = $result->getSource();
    $locality = $source['locality']['locality'];
    $dataLocality[] = array(
        'type'    => 'locality',
        'label'   => $locality,
        'count'   => 1, //How to increase the count here?
    );
}
我试着把所有的东西都放在一个循环中,但我不能计算值​​没错

有办法做到这一点吗

编辑

这应该是我得到的结果:

假设数组有3个“局部性”:

2“foo”

1“巴”


数组中是否存在$locality的值?如果否,则将其存储为计数1。如果是,则在计数中加1

foreach ($results as $result) {
    $source = $result->getSource();
    $locality = $source['locality']['locality'];
    // Manually specify the array key. This makes life much easier down the road,
    // especially when you need to find items in the array.
    if ( !isset($dataLocality[$locality]) ) {
        $dataLocality[$locality] = array('type'    => 'locality',
                                         'label'   => $locality,
                                         'count'   => 1);
    } else {
        $dataLocality[$locality]['count'] += 1;
    }
}
在foreach循环外部声明一个数组(比如
$dataLocality
)。在每个循环中,您都在
$datalocality
中搜索现有的局部性(如果
$result
$datalocality
中)。如果存在计数器,则将计数器递增
$dataLocality[$indexofound]['count']+

如果在$dataLocality中找不到任何位置,则需要添加“type”、“label”和“count”数组


在foreach循环之后,您可以遍历数组并输出结果或对结果执行任何操作。

如果您需要对局部数组进行计数,请使用
count
尝试:

foreach ($results as $result) {
    $source = $result->getSource();
    $locality = $source['locality']['locality'];
    $dataLocality[] = array(
        'type'    => 'locality',
        'label'   => $locality,
        'count'   => count($source['locality']), //get locality array count
    );
}

感谢@Dave的回复,我解决了问题,但由于我无法命名密钥,我在循环之外添加了:

$dataLocality = array_values($dataLocality);
因此,解决问题的完整代码,但有时有人遇到与我类似的问题:

foreach ($results as $result) {
    $source = $result->getSource();
    if(!isset($dataLocality[$locality = $source['locality']['locality']])) {
        $dataLocality[$locality] = array(
            'type'    => 'locality',
            'label'   => $locality,
            'count'   => 1,
        );
    } else {
        $dataLocality[$locality]['count']++;
    }
}
$dataLocality = array_values($dataLocality);

您是否试图增加每个添加数据的计数?是的,我必须计算有多少个值相等​​在我得到的数组中。例如,如果项“locality”在我的数组“dataLocality”中有两个带“foo”的数组和一个带“bar”的数组,我将有一个带标签“foo”和计数2的数组,还有一个带标签“bar”和计数1的数组。请解释您试图获得的结果。我已经用得到的结果更新了问题。我无法创建带key的数组“locality”,我必须将该数组转换为json对象,并且必须是一个数字。“locality”中有多个locality,例如2个locality“foo”和1个locality“bar”“。我不必计算总的位置,但许多都是相同的位置。那么你到底需要什么?局部性foo count 2和bar count 1?foo和bar是示例。我需要计算相等的值​​, 我编辑了我的问题,以明确我需要什么。谢谢,但这已经是我所做的,问题是如何做,因为我找不到计算值的方法​​. 我已经用我得到的结果更新了我的问题。你可以用一个可能的解决方案来补充你的答案吗?感谢你没有办法输出一个结果在一个循环,如果你不知道是否有地方在数组的末尾,你还必须计数。因此,您必须遍历数组,然后对计数结果进行处理。你想要实现什么?性能的提高?是的,因为将对搜索自动完成字段进行响应。但目前我找不到一个有效的解决方案,甚至速度都不慢。。!
$dataLocality = array_values($dataLocality);
foreach ($results as $result) {
    $source = $result->getSource();
    if(!isset($dataLocality[$locality = $source['locality']['locality']])) {
        $dataLocality[$locality] = array(
            'type'    => 'locality',
            'label'   => $locality,
            'count'   => 1,
        );
    } else {
        $dataLocality[$locality]['count']++;
    }
}
$dataLocality = array_values($dataLocality);