我有一个大数组的刮名字和价格类似于以下:
Array(
[0] => apple3
[1] => £0.40
[2] => banana6
[3] => £1.80
[4] => lemon
[5] => grape
[6] => pear5
[7] => melon4
[8] => £2.32
[9] => kiwi
[10] => £0.50
)
我想删除没有立即跟随价格的水果名称。在上面的例子中,这将删除:[4] => lemon [5] => grape [6] => pear5
导致以下输出:
Array(
[0] => apple3
[1] => £0.40
[2] => banana6
[3] => £1.80
[7] => melon4
[8] => £2.32
[9] => kiwi
[10] => £0.50
)
如果需要将数组转换为字符串,这对我来说不是问题,也不是为了帮助正则表达式搜索而在数组项之间添加值。到目前为止,我还无法找到正确的正则表达式来使用preg_match()
和preg_replace()
来实现这一点。
最重要的因素是需要保持水果和价格的顺序,以便我在稍后的阶段将其转换为水果和价格的关联数组。
8条答案
按热度按时间hpxqektj1#
为什么要使用正则表达式?这可以通过一个简单的
foreach
循环来实现,在循环中迭代数组并删除名称后面的名称:3qpi33ja2#
下面的代码同时执行两个任务:去掉没有价值的水果,并将结果转化为一个有价格的水果关联数组。
首先,将数组转换为字符串,用'#'分隔。正则表达式捕获所有带价格的水果组-每个水果组在结果中存储为一个单独的子组。将它们组合成一个关联数组是一个函数调用。
wfsdck303#
像这样的东西也许能帮到你
但没有测试。另外,您需要自己创建函数
is_fruit
;)unguejic4#
如果不重新格式化它,我认为您不能用
preg_match
或preg_replace
来实现它--也许可以,但没有想到。是什么在创建这个数组?如果可能的话,我会把它改成更像:
然后
array_filter($array)
就是你需要清理它的全部。如果你不能改变原始数组的创建方式,我倾向于从原始数组中创建键/值数组。eoxn13cs5#
只需执行以下操作:
ycggw6v26#
假设
$a
是你的数组。2uluyalo7#
尝试将模式**=>([a-zA-Z])替换为=> £0.00 $1**
基本上是搜索有空价格的上下文并插入零英镑。
zaq34kh68#
与
unset()
ing相比,有条件地将元素对推入结果数组并保留原始键可能对代码的人类读者更清楚。代码:(Demo)