过滤所有元素数组中的更改内容值

问题描述 投票:0回答:2

我有这样的值数组

^ array:2 [▼
    0 => "random value1<tr>random string1</tr>random endvalue1"
    1 => "random value2<tr>random string2</tr>random endvalue2"
  )
]

如何将上面的维数组的值更改为如下

^ array:2 [▼
    0 => "random string1"
    1 => "random string2"
  )
]

我正在尝试使用

$array = array_map(function($key) {
    $exp = explode('<tr>', $tes);
    //$exp1 = explode('</tr>', exp[1]); -from this line3 my explode cant access array 
    return exp;

}, $myarray);
dd($array);

我的第3行数组变成这样

^ array:2 [▼
    0 => array:2 [▼
        0 => "random value1"
    1 => "random string1</tr>random endvalue1"
    ]
    1 => array:2 [▼
        0 => "random value2"
    1 => "random string2</tr>random endvalue2"
    ]
  )
]

如何改善这样的情况,或者有其他更好的方法吗?

php arrays laravel multidimensional-array
2个回答
0
投票
$data = [
    "random value1<tr>random string1</tr>random endvalue1",
    "random value2<tr>random string2</tr>random endvalue2",
];

$trim = collect($data)
    ->map(function (string $value) {
        preg_match('/(?<=<tr>)(.*)(?=<\/tr>)/', $value, $match);

        return empty($match) ? $value : $match[1];
    })
    ->toArray();

可以通过这种方式完成,使用框架收集方法来映射值并提取所需的字符串。


0
投票

因为

preg_replace()
可以被调用一次来替换所有元素,所以你可以投射你的集合
toArray()
并调用
preg_replace()
。 (演示)

var_export(
    preg_replace(
        '#.*<tr>(.*?)</tr>.*#',
        '$1',
        collect($data)->toArray()
    )
);

如果您更喜欢使用

->map()
进行链接,您可以进行 n
preg_replace()
调用。 (演示)

var_export(
    collect($data)->map(fn($v) => preg_replace('#.*<tr>(.*?)</tr>.*#', '$1', $v))
);

如果你的数据已经是一个数组并且你不需要实现任何收集方法,那么只需调用

preg_replace()
即可。 (演示)

var_export(
    preg_replace('#.*<tr>(.*?)</tr>.*#', '$1', $data)
);
© www.soinside.com 2019 - 2024. All rights reserved.