嘿伙计们,我怎么能替换索引名称中不包含quant的所有数组索引? 我试着这个:
for( $i = 0; $i < count( $query ); ++$i ){
foreach( $query[$i] as $index => $data ){
echo preg_replace( '/(?!quant(.*)$)/', '', $index ), '<br />';
}
}
答案 0 :(得分:1)
听起来你想要的只是过滤的索引,它不包含"quant"
。如果是这样,那么一个简单的if
就可以了,并且不需要正则表达式或任何字符串操作:
for ($i = 0; $i < count( $query ); ++$i) {
foreach ($query[$i] as $index => $data) {
if (strstr($index, "quant")) {
echo $index, '<br />';
}
}
}
答案 1 :(得分:1)
考虑这个PHP代码来做这个过滤:
$array = array("quant1"=>1, "price1"=>2, "quant2"=>3, "price2"=>4, "quant3"=>3);
$filteredKeys = array_filter(array_keys($array), function ($elem) { return strpos($elem, "quant") !== false; } );
print_r(array_intersect_key($array, array_flip($filteredKeys)));
Array
(
[quant1] => 1
[quant2] => 3
[quant3] => 3
)
答案 2 :(得分:1)
我认为这是你正在寻找的正则表达式:
^(?:(?!quant).)+)$
想法是在使用下一个字符之前在每个位置应用前瞻。这是另一种选择:
^(?!.*quant).+$
这里的前瞻只在字符串的开头应用一次。从那里开始,它扫描整个字符串,寻找quant
的实例。如果找不到,前瞻就会成功,.+$
继续前进并吞噬整个字符串。
编辑:还要注意我添加的开始锚点(^
)。无论你最终使用什么正则表达式,必须锚定在两端。否则你永远不会确定你真的检查了整个字符串。