php 将大小写混合的单词数组转换为经过清理的snakecase值

6qftjkof  于 12个月前  发布在  PHP
关注(0)|答案(3)|浏览(149)

我有一个数组,并使用array_filter()函数过滤值。我在filter函数上使用echo来查看过滤后的值是否有效。

$columns = array(
    0 => 'ISO',
    1 => 'Country',
    2 => 'Country Code',
    3 => 'Type of number',
    4 => 'Voice Enabled',
    5 => 'SMS Enabled',
    6 => 'MMS Enabled',
    7 => 'Domestic Voice Only',
    8 => 'Domestic SMS only',
    9 => 'Price /num/month',
    10 => 'Inbound Voice price/min',
    11 =>  'Inbound SMS price/msg ',
    12 =>  'Inbound MMS price/msg ',
    13 => 'Beta Status',
    14 => 'Address Required',
);
        
echo '<pre>';
$columns = array_filter($columns, '_filter_column_names');
echo '</pre>';

function _filter_column_names($column_name){
    $column_name = str_replace(' /', '_', $column_name);
    $column_name = strtolower(str_replace(array(' ', '/'), '_', trim($column_name)));

    echo $column_name.'<br>';
    return $column_name;
}

echo '<pre>';
    print_r($columns);
echo '</pre>';

字符串

结果

iso
country
country_code
type_of_number
voice_enabled
sms_enabled
mms_enabled
domestic_voice_only
domestic_sms_only
price_num_month
inbound_voice_price_min
inbound_sms_price_msg
inbound_mms_price_msg
beta_status
address_required

Array
(
    [0] => ISO
    [1] => Country
    [2] => Country Code
    [3] => Type of number
    [4] => Voice Enabled
    [5] => SMS Enabled
    [6] => MMS Enabled
    [7] => Domestic Voice Only
    [8] => Domestic SMS only
    [9] => Price /num/month
    [10] => Inbound Voice price/min
    [11] => Inbound SMS price/msg 
    [12] => Inbound MMS price/msg 
    [13] => Beta Status
    [14] => Address Required
)


在函数体中执行的更改在打印数组时不会被保留。尽管似乎filter函数中的数组值正在正确过滤。
你也可以在这里看到http://3v4l.org/SttJ3

ibrsph3r

ibrsph3r1#

我想你误解了array_filter的作用。正如文档中所说,它“使用回调函数过滤数组的元素”,这意味着回调函数应该返回true/false,这取决于它是否应该被包括在内。
你可能想使用的是array_map,它对每个项目运行回调,并返回修改后的项目。

dldeef67

dldeef672#

您没有正确使用回调,根据PHP official manual
迭代数组中的每个值,并将其传递给回调函数。如果回调函数返回true,则将数组中的当前值返回到结果数组中。
你的回调函数需要为你不想在输出数组中的元素返回一个参数。

w9apscun

w9apscun3#

完全放弃使用array_filter(),它是错误的工具的任务。
将所有值转换为下划线,然后将所有非字母序列替换为下划线。
产品编号:(Demo

var_export(
    preg_replace(
        '/[^a-z]+/',
        '_',
        array_map('strtolower', $columns)
    )
);

字符串

相关问题