2013-03-26 91 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

相關問題