12

I would like to do a string replacement in all items in an array. What I have is:

$row['c1'] = str_replace("&", "&", $row['c1']);
$row['c2'] = str_replace("&", "&", $row['c2']);
$row['c3'] = str_replace("&", "&", $row['c3']);
$row['c4'] = str_replace("&", "&", $row['c4']);   
$row['c5'] = str_replace("&", "&", $row['c5']);
$row['c6'] = str_replace("&", "&", $row['c6']);
$row['c7'] = str_replace("&", "&", $row['c7']);   
$row['c8'] = str_replace("&", "&", $row['c8']);
$row['c9'] = str_replace("&", "&", $row['c9']);
$row['c10'] = str_replace("&", "&", $row['c10']); 

How can I achieve this with less code? I thought a foreach statement would work, e.g.:

$columns = array($row['c1'], $row['c2'], $row['c3'], $row['c4'], $row['c5'], $row['c6'], $row['c7'], $row['c8'], $row['c9'], $row['c10']);

foreach ( $columns as $value){
   $value   = str_replace("&", "&", $value);
}

But it doesn't work.

1
  • Is this an XY Problem? Commented Jul 30, 2022 at 5:30

3 Answers 3

35

Just do:

$row = str_replace("&", "&", $row);

Note: Your foreach doesn't work because you need a reference, or use the key:

foreach ( $columns as &$value) { // reference
   $value  = str_replace("&", "&", $value);
}
unset($value); // break the reference with the last element

Or:

foreach ($columns as $key => $value){
   $columns[$key]  = str_replace("&", "&", $value);
}

Although it is not necessary here because str_replace accepts and returns arrays.

Sign up to request clarification or add additional context in comments.

2 Comments

you got it man ... I wasn't aware str_replace accepts arrays too
How would you use this method to replace a string in the second part of an array. ('array string 1','array string 2') this is an example row.
2

You should call it by reference, otherwise foreach creates a duplicate copy of $value

foreach ( $columns as &$value)

Comments

1

Another solution to is to use PHP array_walk like this:

function custom_replace( &$item, $key ) {
   $item = str_replace('22', '75', $item);
} 

// Init dummy array.
$columns = array('Cabbage22', 'Frid22ay', 'Internet', 'Place22', '22Salary', '22Stretch', 'Whale22Inn');

// Print BEFORE.
echo 'Before: ';
print_r($columns);

// Make the replacements.
array_walk($columns, 'custom_replace');

// Print AFTER.
echo 'After:';
print_r($columns);

Output:

Before: Array
(
    [0] => Cabbage22
    [1] => Frid22ay
    [2] => Internet
    [3] => Place22
    [4] => 22Salary
    [5] => 22Stretch
    [6] => Whale22Inn
)
After: Array
(
    [0] => Cabbage75
    [1] => Frid75ay
    [2] => Internet
    [3] => Place75
    [4] => 75Salary
    [5] => 75Stretch
    [6] => Whale75Inn
)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.