【问题标题】:Search an Array and remove entry if it doesn't contain A-Z or a A-Z with a dash搜索数组并删除不包含 A-Z 或带有破折号的 A-Z 的条目
【发布时间】:2011-09-13 22:00:23
【问题描述】:

我有以下数组:

Array
(
    [0] => text
    [1] => texture
    [2] => beans
    [3] => 
)

我想删除不包含 a-z 或 a-z 且带有破折号的条目。在这种情况下,数组项 3(仅包含一个空格)。

我该怎么做?

【问题讨论】:

  • 如果你有 [0 1 2 3] 并且 2 是空格,你的意思是如何摆脱,你想要 [0 1 2] 还是 [0 1 3]?
  • 我要删除第 3 项。
  • Yet Another Geek 提出这个问题(并提供了两个具体选项)的原因是“我想删除第 3 项”过于含糊。重复它没有帮助。请选择 Yet Another Geek 为您精心构建的两个特定选项之一。

标签: php arrays search


【解决方案1】:

尝试:

$input = array( /* your data */ );

function azFilter($var){
    return preg_match('/^[a-z-]+$/i', $var);
}
$output = array_filter($input, 'azFilter');

在 PHP 5.3 中也有可能对其进行简化:

$input = array( /* your data */ );

$output = array_filter($input, function($var){
    return preg_match('/^[a-z-]+$/i', $var);
});

【讨论】:

  • 这将删除整个数组。
  • @hakre - 哈哈,好点 - 我错过了 preg_match 函数的第二个参数 :) 已编辑。谢谢你:D
【解决方案2】:

试试:

<?php
    $arr = array(
        'abc',
        'testing-string',
        'testing another',
        'sdas 213',
        '2323'
    );

    $tmpArr = array();
    foreach($arr as $str){
        if(preg_match("/^([-a-z])+$/i", $str)){
            $tmpArr[] = $str;
        }
    }
    $arr = $tmpArr;
?>

输出:

array
  0 => string 'abc' (length=3)
  1 => string 'testing-string' (length=14)

【讨论】:

    【解决方案3】:

    对于您在问题中提供的数据,请使用带有空回调参数的 array_filter() 函数。这将过滤掉所有空元素。

    $array = array( ... );
    $array = array_filter($array);
    

    如果您需要过滤问题文本中描述的元素,则需要添加一个回调函数,该函数将根据您的需要返回true(有效)或false(无效)。您可能会发现 ctype_alpha 函数对此很有用。

    $array = array( ... );
    $array = array_filter($array, 'ctype_alpha');
    

    如果你还需要允许破折号,你需要提供一个自己的回调函数:

    $array = array( ... );
    $array = array_filter($array, function($test) {return preg_match('(^[a-zA-Z-]+$)', $test);});
    

    此示例回调函数通过正则表达式使用preg_match() 函数。可以制定正则表达式来表示一组特定的字符,如示例中的a-zA-Z 和破折号-(减号)。

    【讨论】:

    • ctype_alpha 不包含破折号。
    • 如果数组项包含例如2个空格?
    • @hsz:已编辑。 @ritch:你说的工作是什么意思?两个空格应该算有效还是无效?你真的能够阅读PHP吗?如果要删除两个空格,那么答案是:是的。
    • @ritch:是的,这将被视为无效。两个空格不匹配 a-z 或 A-Z 或破折号。
    【解决方案4】:

    好的,你可以在数组中循环。创建一个正则表达式来测试它是否符合您的条件。如果失败,请使用 unset() 删除选定的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多