移除数组键前缀

4
我有这样一种数组,其中包含每个月的总收入:
Array ( [Total_Income_JAN] => 5000 [Total_Income_FEB] => 8000 [Total_Income_MAR] => 10000 )

如何从数组键中删除前缀部分,使其变成:

Array ( [JAN] => 4321 [FEB] => 2364 [MAR] => 2364 ) 

@zerkms 遍历数组索引 - user2389411
5个回答

5

试试这个:

<?php

$list  = Array("Total_Income_JAN" => 5000, "Total_Income_FEB" => 8000 , "Total_Income_MAR" => 10000);

function removePrefix(array $input) {

    $return = array();
    foreach ($input as $key => $value) {
        if (strpos($key, 'Total_Income_') === 0)
            $key = substr($key, 13);

        if (is_array($value))
            $value = removePrefix($value); 

        $return[$key] = $value;
    }
    return $return;
}

$list = removePrefix($list);
print_r($list);

?>

Try Demo>>


请查看我的答案,基于这个答案,提供了一个通用的非硬编码解决方案。https://dev59.com/FnLYa4cB1Zd3GeqPa7ir#66674845 - Black

5

首先,这个解决方案适用于php 5.3.x及更高版本。

它将两个数组合并,第一个是原始数组中的键,第二个是值。使用array_map转换键,使用str_replace去除不需要的部分。

$my_array2 = array_combine(
  array_map(
    function($k) { return str_replace("Total_Income_", "", $k); }, 
    array_keys($my_array)
  ),
  array_values($my_array)
);

2

试试这样做

foreach($my_array as $key => $value)
{
    $key2 = trim('Total_Income',$key); //or preg_replace('Total_income','',$key)
    $my_array2[$key2] = $value; 
}
print_r($my_array2);

这里建议使用 trim($key, 'Total_Income'); 来移除字符串中的部分内容,而 str_replace 可能更适合替换字符串中的部分内容。 - mpapec
不,trim('Total_Income',$key) 是正确的语法...请参考这个链接 http://php.net/manual/en/function.trim.php - GautamD31
语法是正确的,但它并不是想要的结果,请尝试使用 php -r 'print trim("Total_Income", "Total_Income_FEB");',然后反转字符串位置。 - mpapec

0

这是一个基于@VijayaPandey的回答改进的通用解决方案。 他的方法是硬编码的,所以我创建了一个更好的解决方案:

使用该方法的方式如下:

$list  = Array("Total_Income_JAN" => 5000, "Total_Income_FEB" => 8000 , "Total_Income_MAR" => 10000);

$list = stripArrayKeyPrefix($list, "Total_Income_");
var_dump($list);

function stripArrayKeyPrefix(array $input, $prefix)
{
    $return = array();
    foreach ($input as $key => $value) {
        if (strpos($key, $prefix) === 0)
            $key = substr($key, strlen($prefix));

        if (is_array($value))
            $value = removePrefix($value, $prefix); 

        $return[$key] = $value;
    }
    return $return;
}

尝试代码

输出:

array(3) {
  ["JAN"]=>
  int(5000)
  ["FEB"]=>
  int(8000)
  ["MAR"]=>
  int(10000)
}

0

试试这个:

$old_array = Array ( 'Total_Income_JAN' => 5000, 'Total_Income_FEB' => 8000, 'Total_Income_MAR' => 10000 );
$new_array = array();
foreach($old_array as $key=>$val){
    $new_key = preg_replace('#Total_Income_(.+)#i','$1',$key);
    $new_array[$new_key] = $val;
}
echo '<pre>';print_r($new_array);

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