我有一个多维数组。我需要搜索特定范围的值,编辑这些值并返回编辑过的数据。
示例数组:
array(3) {
["first"]=>
array(1) {
[0]=>
string(4) "baz1"
}
["second"]=>
array(1) {
[0]=>
string(4) "foo1"
}
["third"]=>
array(1) {
[0]=>
string(4) "foo2"
}
现在我想找到与foo匹配的任何值(示例数组中的foo1和foo2),在其中插入“-bar”(foo-bar1,foo-bar2)并返回该值。有什么方法可以解决这个问题?
EDIT 我应该提到foo实际上可能是whatfoo(例如examplefoo1,somethingelsefoo2,blahblahfoo3)。我认为这排除了str_replace。
答案 0 :(得分:7)
如果您的阵列不是非常深,这可以工作。 ($ array是您想要在以后替换的内容)
$array= array('first' => array('bazi1'), 'second' => array('foo1'), 'third' => array('foo2') );
function modify_foo(&$item, $key)
{
$item = str_replace('foo', 'foo-bar', $item);
}
array_walk_recursive( $array, 'modify_foo' );
如果你想要foo甚至在somethingelsefoo2中被替换,那么str_replace就可以了。
答案 1 :(得分:5)
这样的事情怎么样:
function addDashBar($arr)
{
foreach ($arr as $key => $value)
{
if (is_array($value))
$arr[$key] = addDashBar($value)
else
{
$arr[$key] = str_replace($value, "foo", "foo-bar");
}
}
return $arr;
}
答案 2 :(得分:1)
function test_replace1(&$input, $search, $replace) {
$result = array();
$numReplacements = 0;
foreach ($input as &$value) {
if (is_array($value)) {
$result = array_merge($result, test_replace1($value, $search, $replace));
} else {
$value = str_replace($search, $replace, $value, $numReplacements);
if ($numReplacements) {
$result[] = $value;
}
}
}
return $result;
}
$changed_values = test_replace1($arr, 'foo', 'foo-bar');
答案 3 :(得分:1)
如果您有一维数组,则应该能够使用array_map();
**编辑:我在这里有一些代码,但经过测试,它不起作用。
关于你的编辑。 仅仅因为Foo位于字符串的末尾,并不意味着str_replace将不再起作用。
echo str_replace("foo","foo-bar","mycrazystringwithfoorightinthemiddleofit");
仍会返回
mycrazystringwithfoo-barrightinthemiddleofit
如果你的数组是任意深度的树结构,那么你不可避免地必须使用递归并且问题变得非常重要。您可能想查看
array_recursive_walk()函数。 here 希望这会有所帮助。