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