2013-03-26 58 views
0

我有一个大的SQL查询返回聚合数据。php数组键包含一个词

我返回数组是这样的:

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”的数量,所以我需要把所有含有该词的第一个莫名其妙的钥匙。

+0

循环数组^^ – ficuscr 2013-03-26 16:19:17

+0

@Steve多谢了,我是不是能够找到自己出于某种原因 – SoluableNonagon 2013-03-26 16:20:06

+0

这返回的数据表明,穷表的设计。为什么'sessionCount'不是一个从属表而不是几十列? – Barmar 2013-03-26 16:42:13

回答

2
$tmp = array(); 
foreach ($array as $sub) 
    foreach ($sub as $k => $v) 
     if (substr($k, 0, 12) == 'sessionCount') 
      $tmp[$k] = $v; 
+0

这对我很好,谢谢你。 – SoluableNonagon 2013-03-26 16:34:15

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); 
+0

这是一个比我需要更多的游行,但无论如何感谢你 – SoluableNonagon 2013-03-26 16:35:43

0

不改变数组,你只能通过brute forc来做到这一点e .. aka。尝试“sessionCount [0-999]” ..

不同的做法是对数组的键使用的strcmp(),像这样:

foreach($array as $key => $value) 
    if(!strcmp($key,"sessionCount")) 
     dosomething($key,$value); 
通过您的阵列一次重组它的东西

或环像这样:

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

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

+0

我同意结构应该更好,也许在SQL ..但能够重组您的阵列也是原始问题的答案。 – 2013-03-26 16:23:54

+0

我希望我可以更好地构造它,但是我对SQL的使用经验并不好,我假设上述结构需要一些子查询? – SoluableNonagon 2013-03-26 16:37:44

+0

它会要求您查看构造之上的foreach()。 ;) – 2013-03-26 16:39:40

相关问题