str_replace 多维数组中的特定值
str_replace specific value in multidimensional array
我想用 .
替换某些键中的 ,
,例如 [Price]
。
给出这个数组:
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
)
)
以及以下函数:
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);
}
}
}
}
有人可以帮我吗?我尝试了几件事,但无法正常工作。
改变主数组,像这样:
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);
}
}
}
}
如果您只想对一组键进行操作,则需要声明这些键并使用其他函数:
$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);
}
}
}
}
您可以使用 array_walk_recursive
函数遍历关联数组的每个元素。
这里 $result
是您的输入数组。
array_walk_recursive($result, 'replacer');
/**
* Replace comma with dot from 'Price' element of associative array.
* This function call recursively
*
* @access public
*
* @param string|int|null $item
* @param string $key
* @return void
*/
public function replacer(& $item, $key)
{
if ($key == 'Price') {
$item = str_replace(",", ".", $item);
}
}
var_dump($result)
用 .
替换 ,
后检查输出
你可以试试这个:
$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);
输出:
Array
(
[0] => Array
(
[price] => 60.53
)
[1] => Array
(
[price] => 9.34
)
)
候补
array_walk_recursive($r, function (your args){
});
通过 array_walk_recursive 如果您想更改现有 multi-dimensional 数组的值,您需要通过在变量前面加上符号 (&) 来指定回调的第一个参数作为引用
array_walk_recursive($data, function(&$item, $key){
if( $key == 'Price' ){
$item = str_replace(',','.',$item);
}
});
我想用 .
替换某些键中的 ,
,例如 [Price]
。
给出这个数组:
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
)
)
以及以下函数:
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);
}
}
}
}
有人可以帮我吗?我尝试了几件事,但无法正常工作。
改变主数组,像这样:
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);
}
}
}
}
如果您只想对一组键进行操作,则需要声明这些键并使用其他函数:
$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);
}
}
}
}
您可以使用 array_walk_recursive
函数遍历关联数组的每个元素。
这里 $result
是您的输入数组。
array_walk_recursive($result, 'replacer');
/**
* Replace comma with dot from 'Price' element of associative array.
* This function call recursively
*
* @access public
*
* @param string|int|null $item
* @param string $key
* @return void
*/
public function replacer(& $item, $key)
{
if ($key == 'Price') {
$item = str_replace(",", ".", $item);
}
}
var_dump($result)
用 .
,
后检查输出
你可以试试这个:
$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);
输出:
Array
(
[0] => Array
(
[price] => 60.53
)
[1] => Array
(
[price] => 9.34
)
)
候补
array_walk_recursive($r, function (your args){
});
通过 array_walk_recursive 如果您想更改现有 multi-dimensional 数组的值,您需要通过在变量前面加上符号 (&) 来指定回调的第一个参数作为引用
array_walk_recursive($data, function(&$item, $key){
if( $key == 'Price' ){
$item = str_replace(',','.',$item);
}
});