【问题标题】:php array keys which contain a word [duplicate]包含单词的php数组键[重复]
【发布时间】:2013-03-26 16:16:49
【问题描述】:

我有一个返回聚合数据的大型 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' 后面的数字,所以我需要先获取包含该单词的所有键不知何故。

【问题讨论】:

  • 遍历数组^^
  • @Steve 非常感谢,由于某种原因我自己没能找到
  • 返回的数据表明表格设计不佳。为什么sessionCount 不是一个依赖表而不是几十列?
  • sessionCount 不是它自己的表,sessionCount 是其他现有表的聚合函数的结果,这些表有条件地跨越多个模式并按条件主键分组。基本上,我有大量的模式和每个模式中的大量表,这个结果是一个“报告”同时运行在其中的许多表中,将许多表连接在一起。

标签: php arrays


【解决方案1】:
$tmp = array();
foreach ($array as $sub)
    foreach ($sub as $k => $v)
        if (substr($k, 0, 12) == 'sessionCount')
            $tmp[$k] = $v;

【讨论】:

  • 这对我很有用,谢谢。
【解决方案2】:

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

$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);

【讨论】:

  • 这比我需要的多一点,但还是谢谢你
【解决方案3】:

在不更改数组的情况下,您只能通过蛮力执行此操作.. aka。试试“sessionCount[0-999]”..

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

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

或者循环一次你的数组,然后把它重组成这样的:

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

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

【讨论】:

  • 我同意结构应该更好,也许在 SQL 中。但能够重组你的数组也是原始问题的答案。
  • 我希望我能更好地构造它,但我的 SQL 经验不是很好,我认为上述结构需要一些子查询?
  • 这将需要您查看结构上方的 foreach()。 ;)
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 2019-06-16
  • 2018-08-07
  • 2012-11-27
  • 2023-04-11
  • 2021-01-15
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多