PHP数组与多维数组之间的查找替换

PHP search and replace between array and multidimensional array

我有输入textarea,我输入的文字被转换成$array像:

Array
(
    [0] => cat
    [1] => sat
    [2] => on
    [3] => the
    [4] => monkey
    [6] => is
    [7] => nice
    [8] => dog
    [9] => ate
    [10] => fish
)

$another_array 喜欢:

Array
(
    [0] => Array
        (
            [id] => 1
            [word] => cat
            [keyword] => nice cat
        )

    [1] => Array
        (
            [id] => 2
            [word] => dog
            [keyword] => good dog
        )

    [2] => Array
        (
            [id] => 3
            [word] => monkey
            [keyword] => cute monkey
        )

    [3] => Array
        (
            [id] => 4
            [word] => fish
            [keyword] => fresh fish
        )

    [4] => Array
        (
            [id] => 5
            [word] => bird
            [keyword] => love bird
        )

    [5] => Array
        (
            [id] => 6
            [word] => rabbit
            [keyword] => rats
        )

    [6] => Array
        (
            [id] => 7
            [word] => animal
            [keyword] => not animal
        )

)

我想做的是替换 $array 中匹配 $another_array 中的 [word] 的每个单词,并替换 $another_array 中基于文本区域 [keyword] 的每个单词

我试过用str_replace,结果乱七八糟

我在textarea中输入的文字

cat sat on the monkey, monkey is nice, dog ate fish

我想要这样的结果

nice cat sat on the cute monkey, cute monkey is nice, good dog ate fresh fish

试试这个代码

$check = [
    ["id"=>1, "word"=>"dog", "keyword"=>"good dog"],
    ["id"=>2, "word"=>"monkey", "keyword"=>"cute monkey"],
    ["id"=>3, "word"=>"fish", "keyword"=>"fresh fish"]
];


$input = [
           'dog',
           'sat',
           'monkey',       
           'fish'       
        ];


$result =   array_map(function ($v) use ($value, $check) {
                $key = array_search($v, array_column($check, 'word'));
                if(is_numeric($key)){
                    return $v = $check[$key]['keyword'];
                }

                return $v;
            }, $input);

print_r($result);

echo implode(" ",$result);

Link : https://eval.in/737332

为了提高性能,您可以保存地图以避免每次都遍历另一个数组。你可以使用 implode 和 explode 在字符串和数组之间转换。

$value_map = [];
foreach($another_array as $v)
{
  $value_map[$k['word']] = $v['keyword'];
}
$result = array_map(function($v) use($value_map){return isset($value_map[$v]) ? $value_map[$v] : $v;}, $array);

如果您没有得到任何选项,请试试这个。

$array = array
(
    0 => 'cat',
    1 => 'sat',
    2 => 'on',
    3 => 'the',
    4 => 'monkey',
    6 => 'is',
    7 => 'nice',
    8 => 'dog',
    9 => 'ate',
    10 => 'fish'
);

$anotherarray = array
(
    0 => array('id' => 1,'word' => 'cat','keyword' => 'nice cat'),
    1 => array('id' => 2,'word' => 'dog','keyword' => 'good dog'),
    2 => array('id' => 3,'word' => 'monkey','keyword' => 'cute monkey'),
    3 => array('id' => 4,'word' => 'fish','keyword' => 'fresh fish'),
    4 => array('id' => 5,'word' => 'bird','keyword' => 'love bird'),
    5 => array('id' => 6,'word' => 'rabbit','keyword' => 'rats'),
    6 => array('id' => 7,'word' => 'animal','keyword' => 'not animal')
);

$concat = implode(' ', $array);

echo $concat.'<br/>';

foreach ($array as $key1 => $item) 
{
    foreach ($anotherarray as $key2 => $search) 
    {
        if(in_array($item, $search))
        {
            $array[$key1] = $search['keyword'];
        }
    }
}

$concat = implode(' ', $array);

echo $concat;

试试这个代码,

foreach ($array as $k => $v) {
    if($a = array_search($v, array_column($another_array, 'word'))){
        $array[$k] = $another_array[$a]['keyword'];
    }
}
$str = implode(' ', $array);

试一试,这会奏效。