0

我正在寻找执行以下操作的最佳方法:

 [key] => Array
    (
        [alert] => Array
            (
                [0] => Possible text issue
                [1] => Multiple text issues
                [2] => Incorrect format
                [3] => format is not supported
            )
    )

我基本上想在所有值中查找关键字文本,无论哪个有文本删除它们,而是创建一个“存在文本问题”的新值

与格式相同,它将删除最后两个值并创建一个说“使用了错误的格式”

所以我的最终数组看起来像这样

 [key] => Array
    (
        [alert] => Array
            (
                [0] => There are text issues
                [1] => Wrong format is used
            )
    )

关于如何做到这一点的任何想法。我会写我到目前为止所做的,但我什至不知道从哪里开始。

我正在考虑做

 foreacch ($array['key']['alert'] as $key=>$value) {
      // maybe use preg_match for specific key words or use str_replace ??
 }
4

2 回答 2

1

尝试一个递归函数,它遍历整个数组和子数组,并在非数组值中搜索 $contains 字符串,并用 $stringToReplaceWith 字符串替换整个数组元素。

function replaceArrayElementRecursiveley ($array, $contains = "text", $stringToReplaceWith = "There are text issues") {
    foreach ($array as $key=>$value){
        if (is_array($value)) {
            $array[$key] = replaceArrayElementRecursiveley($value, $contains, $stringToReplaceWith);
        } else if (stripos($value, $contains) !== false) {
            $array[$key] = $stringToReplaceWith;
        }
    }

    return $array;
}

$test = array(
    "key" => array(
        "alert" => array(
            0 => "Possible text issues",
            1 => "Multiple text issues",
            2 => "Incorrect format",
            3 => "format is not supported",
        )
    )
);

$test = replaceArrayElementRecursiveley($test);

如果您只需要搜索“文本”而不​​需要其他任何内容,那么在我看来,使用 preg_replace 是不必要的,在这种情况下 preg_match 也是如此。但是,如果您需要搜索不止一次,您可以轻松地将 stripos() 切换到 preg_match()。

于 2013-07-28T07:24:58.443 回答
0

我认为这应该有效:

foreach ($key['alert'] as $var1=>$var2)
{
     if(strstr($var2,'text'))
     {
         array_splice($var2,$var1,($var1)+1,'There are text issues');
     }
}

$Key['alert']=array_unique($Key['alert'])

但是如果最后一个数组不是关联的,那么还有一种更简单的方法可以解决问题。

于 2013-07-28T07:12:10.700 回答