preg_grep 不适用于多维数组[重复]

Posted

技术标签:

【中文标题】preg_grep 不适用于多维数组[重复]【英文标题】:preg_grep isn't working on multidimensional arrays [duplicate] 【发布时间】:2015-04-17 07:00:25 【问题描述】:

我有一个名为$jsonvpr 的数组。当尝试像preg_grep("/Jake.*.Peavy/i", $jsonvpr) 一样拉取preg_grep 时,它会返回Notice: Array to string conversion in /var/www/html/crawlnew.php on line 310 很多次(我假设数组上的每个条目一次)并且它不返回任何内容。我怀疑问题在于不仅有数组,还有数组的数组,这就是为什么它没有按我想要的那样工作,但我不知道该怎么做。拜托,任何人都可以指出正确的方向吗?

数组的样例:

array(102) 
  [0]=>
  array(8) 
    [0]=>
    string(4) "Rank"
    [1]=>
    string(6) "Player"
    [2]=>
    string(13) "Games Started"
    [3]=>
    string(16) "Excellent Starts"
    [4]=>
    string(14) "Neutral Starts"
    [5]=>
    string(11) "Poor Starts"
    [6]=>
    string(12) "Volatility %"
    [7]=>
    string(3) "VPR"
  
  [1]=>
  array(8) 
    [0]=>
    string(0) ""
    [1]=>
    string(73) "Clayton Kershaw"
    [2]=>
    string(0) ""
    [3]=>
    string(0) ""
    [4]=>
    string(0) ""
    [5]=>
    string(0) ""
    [6]=>
    string(0) ""
    [7]=>
    string(0) ""
  
  [2]=>
  array(8) 
    [0]=>
    string(0) ""
    [1]=>
    string(73) "Felix Hernandez"
    [2]=>
    string(0) ""
    [3]=>
    string(0) ""
    [4]=>
    string(0) ""
    [5]=>
    string(0) ""
    [6]=>
    string(0) ""
    [7]=>
    string(0) ""
  
  [...]

【问题讨论】:

你的数组是多维的! 那里不要使用多维数组。 您到底想返回什么,整个数组条目还是只是一个名称? 整个数组条目。例如,我需要它使用正则表达式按名称查找,当它找到它时,我需要知道它是什么条目,以便能够修改其统计信息(排名、玩家、游戏开始... )。例如,如果正则表达式是 /Clayton.*.Kershaw/i,我需要返回值 1,所以我知道 Clayton Kershaw 在 $jsonvpr[1] 内。 【参考方案1】:

你可以先把所有的名字放到一个数组中,然后 preg_grep :

$names = array_column($jsonvpr, 1);
$foundElements = preg_grep("/Jake.*.Peavy/i", $names);

其中 array_column 的第二个参数 1 是要匹配的数组元素的索引。

【讨论】:

谢谢,这真的很聪明!虽然我采取了不同的方法,但你让我走上了正轨!我所做的是:foreach($jsonvpr as $result) array_push($vprnames, $result[1]); 然后$pitcherpos = preg_grep($regex, $vprnames);

以上是关于preg_grep 不适用于多维数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于展平多维数组的函数[重复]

带有风味的 ext 变量不适用于多维

python之numpy多维数组

多维数组到多维 SimpleXMLElement(XML 对象)[重复]

伪造一个多维数组[重复]

C#多维数组转换成数组[重复]