给定一个数组数组,如何从每个值中去掉子字符串“GB”?

Posted

技术标签:

【中文标题】给定一个数组数组,如何从每个值中去掉子字符串“GB”?【英文标题】:Given an array of arrays, how can I strip out the substring "GB" from each value? 【发布时间】:2011-02-17 22:31:48 【问题描述】:

我的数组中的每个项目都是一个大约有 5 个值的数组。其中一些是以“GB”结尾的数字。我需要相同的数组,但去掉“GB”,以便只保留数字。

所以我需要遍历整个数组,在每个子数组上获取每个值并从中剥离字符串“GB”并从输出中创建一个新数组。

任何人都可以推荐有效的方法吗?

【问题讨论】:

【参考方案1】:

您可以为此使用array_walk_recursive()

array_walk_recursive($arr, 'strip_text', 'GB');

function strip_text(&$value, $key, $string) 
  $value = str_replace($string, '', $value);

这比通过引用(正确地)遍历具有其值的数组要尴尬得多。

【讨论】:

【参考方案2】:

您可以创建自己的自定义函数来遍历数组的值,检查子字符串GB 是否存在,如果存在,将其删除。使用该函数,您可以将原始数组和函数传递给array_map

【讨论】:

【参考方案3】:
// i only did the subarray part
$diskSizes = array("500", "300 GB", "200", "120 GB", "130GB");
$newArray = array();

foreach ($diskSizes as $diskSize) 
    $newArray[] = str_replace('GB', '', $diskSize);




// look at the new array
print_r($newArray);

【讨论】:

【参考方案4】:
$arr = ...

foreach( $arr as $k => $inner ) 
   foreach( $inner as $kk => &$vv ) 
      $vv = str_replace( 'GB', '', $vv );
   

这实际上使原始数组与新字符串保持不变。 (注意&$vv,这意味着我通过引用获取变量,这意味着循环内对$vv 的任何更改都会影响实际的字符串,而不是通过复制)

【讨论】:

以上是关于给定一个数组数组,如何从每个值中去掉子字符串“GB”?的主要内容,如果未能解决你的问题,请参考以下文章

如何保留数组中值的引号

LeetCode

如何比较字典值中的多个数组,并将每个数组元素的字典键映射到新数组/列表中

如何从给定范围的阵列中打印所有子阵列?

如何在使用interpolate.interp2d绘制曲面后从给定的Z值中获取X,Y值

给定一个长字符串数组,如果它们最多相差一个字符,我如何有效地检查给定的子字符串对(给定字符串的)?