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

6qftjkof  于 2024-01-05  发布在  PHP
关注(0)|答案(3)|浏览(183)

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

  1. $columns = array(
  2. 0 => 'ISO',
  3. 1 => 'Country',
  4. 2 => 'Country Code',
  5. 3 => 'Type of number',
  6. 4 => 'Voice Enabled',
  7. 5 => 'SMS Enabled',
  8. 6 => 'MMS Enabled',
  9. 7 => 'Domestic Voice Only',
  10. 8 => 'Domestic SMS only',
  11. 9 => 'Price /num/month',
  12. 10 => 'Inbound Voice price/min',
  13. 11 => 'Inbound SMS price/msg ',
  14. 12 => 'Inbound MMS price/msg ',
  15. 13 => 'Beta Status',
  16. 14 => 'Address Required',
  17. );
  18. echo '<pre>';
  19. $columns = array_filter($columns, '_filter_column_names');
  20. echo '</pre>';
  21. function _filter_column_names($column_name){
  22. $column_name = str_replace(' /', '_', $column_name);
  23. $column_name = strtolower(str_replace(array(' ', '/'), '_', trim($column_name)));
  24. echo $column_name.'<br>';
  25. return $column_name;
  26. }
  27. echo '<pre>';
  28. print_r($columns);
  29. echo '</pre>';

字符串

结果

  1. iso
  2. country
  3. country_code
  4. type_of_number
  5. voice_enabled
  6. sms_enabled
  7. mms_enabled
  8. domestic_voice_only
  9. domestic_sms_only
  10. price_num_month
  11. inbound_voice_price_min
  12. inbound_sms_price_msg
  13. inbound_mms_price_msg
  14. beta_status
  15. address_required
  16. Array
  17. (
  18. [0] => ISO
  19. [1] => Country
  20. [2] => Country Code
  21. [3] => Type of number
  22. [4] => Voice Enabled
  23. [5] => SMS Enabled
  24. [6] => MMS Enabled
  25. [7] => Domestic Voice Only
  26. [8] => Domestic SMS only
  27. [9] => Price /num/month
  28. [10] => Inbound Voice price/min
  29. [11] => Inbound SMS price/msg
  30. [12] => Inbound MMS price/msg
  31. [13] => Beta Status
  32. [14] => Address Required
  33. )


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

ibrsph3r

ibrsph3r1#

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

dldeef67

dldeef672#

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

w9apscun

w9apscun3#

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

  1. var_export(
  2. preg_replace(
  3. '/[^a-z]+/',
  4. '_',
  5. array_map('strtolower', $columns)
  6. )
  7. );

字符串

相关问题