'str_replace specific value in multidimensional array
I would like to replace the , with . in some Keys like [Price] for instance.
Given this array:
Array
(
[0] => Array
(
[Product line] => Misc
[Seller] => aaa.com
[Tracking ID] => bbbb
[Date shipped] => October 23, 2015
[Price] => 60,43
[Referral fee rate] => 3,00%
[Quantity] => 2
[Revenue] => 120,86
[Earnings] => 3,62
[Sub Tag] => xxxx
)
[1] => Array
(
[Product line] => Misc
[Seller] => aaaa.com
[Tracking ID] => bbbb
[Date shipped] => October 23, 2015
[Price] => 9,34
[Referral fee rate] => 6,96%
[Quantity] => 1
[Revenue] => 9,34
[Earnings] => 0,65
[Sub Tag] => xxxx
)
)
And the following function:
function str_replace_specific_value($sSearch, $sReplace, &$aSubject){
foreach($aSubject as $sKey => $uknValue) {
if(is_array($uknValue)) {
foreach($sKey as $fKey => $fuknValue) {
$uknValue['Price'] = str_replace($sSearch, $sReplace, $fuknValue);
}
}
}
}
Can someone help me please? I tried a couple of things but can't get it to work.
Solution 1:[1]
Change the main array, like this:
function str_replace_specific_value($sSearch, $sReplace, &$aSubject){
foreach($aSubject as $key => $sub_array) {
if(is_array($sub_array)) {
foreach($sub_array as $sub_key => $sub_value) {
$sSubject[$key][$sub_key] = str_replace($sSearch, $sReplace, $sub_value);
}
}
}
}
In casu you wanted to do only on a set of keys, you would need to declare those keys and use this other function:
$keys_to_be_replaced = ['price','whatever'];
function str_replace_specific_value($sSearch, $sReplace, &$aSubject, $keys_to_be_replaced){
foreach($aSubject as $key => $sub_array) {
if(is_array($sub_array)) {
foreach($sub_array as $sub_key => $sub_value) {
if(in_array($sub_key,$keys_to_be_replaced))
$sSubject[$key][$sub_key] = str_replace($sSearch, $sReplace, $sub_value);
}
}
}
}
Solution 2:[2]
You can try this:
$arr[0] = array("price" => "60,53");
$arr[1] = array("price" => "9,34");
foreach ($arr AS $key => $value) {
$arr[$key]["price"] = str_replace(",", ".", $arr[$key]["price"]);
}
echo "<pre>";
print_r($arr);
Output:
Array
(
[0] => Array
(
[price] => 60.53
)
[1] => Array
(
[price] => 9.34
)
)
Solution 3:[3]
Alternate
array_walk_recursive($r, function (your args){
});
Solution 4:[4]
Via array_walk_recursive if you want to change the values of an existing multi-dimensional array you need to specify the first argument of the callback as a reference by preceding the variable with an ampersand (&)
array_walk_recursive($data, function(&$item, $key){
if( $key == 'Price' ){
$item = str_replace(',','.',$item);
}
});
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Criesto |
| Solution 3 | iknow |
| Solution 4 | RafaSashi |
