Search and replace inside an associative array

后端 未结 10 1850
没有蜡笔的小新
没有蜡笔的小新 2021-01-20 22:14

I need to search and replace inside an associative array.

ex:

$user = \"user1\"; // I\'ve updated this

$myarray = array(\"user1\" => \"search1\",         


        
相关标签:
10条回答
  • 2021-01-20 22:31

    There's a function for this : array_map().

    // Using a lamba function, PHP 5.3 required
    $newarray = array_map(
        function($v) { if ($v == 'search1') $v = 'search4'; return $v; },
        $myarray
    );
    

    If you don't want to use a lambda function, define a normal function or method and callback to it.

    0 讨论(0)
  • 2021-01-20 22:32

    Search and replace inside an associative array or numeric Replace value in any associative array and array can be any deep

    function array_value_replace($maybe_array, $replace_from, $replace_to) {
    
        if (!empty($maybe_array)) {
            if (is_array($maybe_array)) {
                foreach ($maybe_array as $key => $value) {
                    $maybe_array[$key] = array_value_replace($value, $replace_from, $replace_to);
                }
            } else {
                if(is_string($maybe_array)){
                    $maybe_array = str_replace($replace_from, $replace_to, $maybe_array);
                }               
            }
        }
    
        return $maybe_array;
    }
    
    0 讨论(0)
  • 2021-01-20 22:38
    $user = "user1";
    $myarray = array("user1" => "search1", "user2" => "search2", "user3" => "search1" );
    foreach($myarray as $key => $val)
    {
        if ($val == 'search1' and $key == $user )
        {
           $myarray[$key] = 'search4';
           break;
        }
    }
    print_r($myarray);
    

    Prints:

    Array
    (
        [user1] => search4
        [user2] => search2
        [user3] => search1
    )
    
    0 讨论(0)
  • 2021-01-20 22:41
    $myarray = array("user1" => "search1", "user2" => "search2" );
    
    foreach($myarray as $key => $val)
    {
        if ($val == 'search1') $myarray[$key] = 'search4';
    }
    
    0 讨论(0)
  • 2021-01-20 22:42

    Why not just do

    if (isset($myarray[$user])) $myarray[$user] = 'search4';
    
    0 讨论(0)
  • 2021-01-20 22:45

    Updated

    Since the post was updated, and I have had chance to get some sleep, I realized my answer was stupid. If you have a given key and you need to change it's value, why iterate over the whole array?

    $user    = 'user1';
    $search  = 'search1';
    $replace = 'search4';
    $array   = array('user1' => 'search1', 'user2' => 'search2');
    
    if (isset($array[$user]) && $search === $array[$user]) $array[$user] = $replace;
    

    Similar to @Joseph's method (pretty much the same), but with a few tweaks:

    $user = 'user1';
    $array = array("user1" => "search1", "user2" => "search2" );
    
    foreach($array as $key => &$value) {
        if ($key === $user) {
            $value = 'search4';
            break; // Stop iterating after key has been found
        }
    }
    

    Passing by reference is a nicer way to edit inside foreach, and is arguably quicker.

    0 讨论(0)
提交回复
热议问题