0

我有一个返回聚合数据的大型 SQL 查询。

我返回的数组是这样的:

array(37) { // I get 37 arrays returned 
    [0] => array(10) {
        ["groupId"] => string(1) "3"  // the first param is just an id  
        ["sessionCount84"] => string(1) "0"   
        ["sessionCount1"] => string(1) "1" 
    } ...

每个子数组将包含多个带有单词“sessionCount”的键和一个数字,并且可能有很多。

有没有办法获取包含单词 'sessionCount[someNumber]" 的键的所有值?

我在 php 中尝试了 array_keys 函数,但这需要完全匹配的单词,这意味着我需要知道键中“sessionCount”后面的数字,所以我需要先以某种方式获取包含该单词的所有键。

4

3 回答 3

2
$tmp = array();
foreach ($array as $sub)
    foreach ($sub as $k => $v)
        if (substr($k, 0, 12) == 'sessionCount')
            $tmp[$k] = $v;
于 2013-03-26T16:23:04.250 回答
1

也许这样的事情会有所帮助。

$myArray = array(37) { [0]=>  // I get 37 arrays returned  
    array(10) { ["groupId"]=> string(1) "3"  // the first param is just an id  
    ["sessionCount84"]=> string(1) "0"   
    ["sessionCount1"]=> string(1) "1" } ...

$sessions = array();
array_map(function($session) use (&$sessions) {
    foreach ($session as $key => $value) {
        if ($key starts with "sessionCount") // I'm going to leave that up to you
            $sessions[$key] = $value;
    }
}, $myArray);
于 2013-03-26T16:20:58.463 回答
0

在不更改数组的情况下,您只能通过蛮力来做到这一点.. aka。尝试“sessionCount [0-999]”..

另一种方法是在数组键上使用 strcmp() ,如下所示:

foreach($array as $key => $value) 
    if(!strcmp($key,"sessionCount")) 
        dosomething($key,$value);

或遍历您的数组一次并将其重组为如下所示:

array() {
  ["sessionCount"] => array() {
      [84] => "",
      [1] => "",
  }
}

..之后找到你需要的所有钥匙应该是在公园里散步。;)

于 2013-03-26T16:21:55.247 回答