在PHP数组中将一个元素替换为另外两个元素

4

总结:给定一个数组。

{a, b, ..., w, x, ..., z}

在位置 x 插入多个元素 {m, n, ..., r},并删除 x。最终的数组为:
{a, b, ..., w, m, n, ..., r, ..., z}

拥有一个返回数组

$return_arr = array(
                    'saa'=>'A2223',
                    'asab'=>'asB',
                    'wqed'=>'D234',
                    'wqasee'=>'Esd',
                    'wqewf'=>'Ffds',
                    'monwa'=>'monwaaas'//*
                    );

如果在这个数组中存在元素'monwa'=>'monwaaas',它将返回一个新的数组。新数组将是我们找到的下一个元素的顺序。 例如, 如果我们有 $return_arr =>新数组应该是

(add two more element ('hi'=>'HI','hello'=>'HELLO')

$new_array = array(
                    'saa'=>'A2223',
                    'asab'=>'asB',
                    'wqed'=>'D234',
                    'wqasee'=>'Esd',
                    'wqewf'=>'Ffds',
                    'hi'=>'HI',
                    'hello'=>'HELLO'
                    );

如果

$return_arr = array(
                    'saa'=>'A2223',
                    'asab'=>'asB',
                    'monwa'=>'monwaaas',//*
                    'wqed'=>'D234',
                    'wqasee'=>'Esd',
                    'wqewf'=>'Ffds'
                    );

新数组应该是:
$new_array = array(
                    'saa'=>'A2223',
                    'asab'=>'asB',
                    'hi'=>'HI',
                    'hello'=>'HELLO',
                    'wqed'=>'D234',
                    'wqasee'=>'Esd',
                    'wqewf'=>'Ffds'
                    );

等等看...

有人知道如何做到这一点吗?

谢谢

3个回答

1

在线解释器示例

1)搜索该元素的位置,2)删除该元素,3)然后将其插入到其前一个位置。

$pos = array_search_pos($arr, 'monwa');
unset($arr['monwa']);
$result = array_insert_at($arr, $pos, array("key1"=>"value1", "key2"=>"value2"));

使用这些函数:

function array_search_pos($arr, $key) {
    $i = 0;
    foreach ($arr as $k => $v) {
        if ("$k" == "$key")
            return $i;
        $i++;
    }
    return false;
}

function array_insert_at($array, $pos, $values) {
    return array_slice($array, 0, $pos, true) +
        $values +
        array_slice($array, $pos, count($array)-$pos, true);
}

$return_arr = array( 'saa'=>'A2223', 'asab'=>'asB', 'wqed'=>'D234', 'wqasee'=>'Esd', 'monwa'=>'monwaaas',//这里有问题 'wqewf'=>'Ffds' ); - tree em
如果我们在开头和结尾处添加'monwa'=>'monwaaas',会出现问题。 - tree em
@python 它在开头和结尾都能工作。不过,“结束后”你的意思我不太确定。 - Artefacto

0

@Artefacto

这将保持相同的位置,我确定。

$return_array 将以 $new_array 中的位置填充。

$new_array = array(
                    'saa'=>'A2223',
                    'asab'=>'asB',
                    'monwa'=>'monwaaas',//*
                    'wqed'=>'D234',
                    'wqasee'=>'Esd',
                    'wqewf'=>'Ffds'
                    );

$element_array = array('hi'=>'HI','hello'=>'HELLO');

foreach($new_array as $key=>$value)
{
        if($key == 'monwa' && $value =='monwaaas')
        {
               foreach($element_array as $key1=>$value1)
               {
                     $return_array[$key1] = $value1;
           }
        }
    else
    {
               $return_array[$key] = $value;
    }
}

echo "<pre>";
print_r($return_array);
echo "<pre>";

请尝试一次


这应该是一条注释。我指的是位置,而不是数组键。例如,array('a'=>1, 'b'=>2)array('b'=>2, 'a'=>1) - Artefacto
很抱歉和你们这些才华横溢的人争论。但我已经检查了我的代码。我知道它对于大数组来说并不高效,但我认为我的答案是正确的。请尝试一下。 - Maulik Vora

-1
你可以这样做。
foreach($new_array as $key=>$value)
{
       if($key == 'monwa' && $value =='monwaaas')
       {
               foreach($element_array as $key1=>$value1)
               {
                       $return_arrat[$key1] = $value1;
               }
       }
       else
       {
              $return_array[$key] = $value
       }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接