【问题标题】:PHP - Filter an array string alphabeticallyPHP - 按字母顺序过滤数组字符串
【发布时间】:2019-04-25 02:54:15
【问题描述】:

我有一个字符串数组

$cities = ['New York', 'Boston', 'Los Angeles', 'Cincinnati', 'Chicago', 'Houston', 'Philadelphia', 'Dallas', 'Seattle'];

我想为每个字母检索以字母 A、B、C 开头的所有字符串。

避免无用代码重复的最佳方法是什么?

【问题讨论】:

标签: php arrays filter


【解决方案1】:

你可以简单地排序数组

$cities = ['New York', 'Boston', 'Los Angeles', 'Cincinnati', 'Chicago', 'Houston', 'Philadelphia', 'Dallas', 'Seattle'];

sort($cities);

【讨论】:

  • 请将文档链接发布到实际的manual 而不是第三方网站
【解决方案2】:

如果我理解正确,您正在尝试创建 26 个数组,每个数组对应字母表中的每个字母,每个数组包含以该字母开头的城市。

<?php
    $cities = ['New York', 'Boston', 'Los Angeles', 'Cincinnati', 'Chicago', 'Houston', 'Philadelphia', 'Dallas', 'Seattle'];

    //Our 26 arrays
    $arrA = array();
    $arrB = array();
    $arrC = array();
    $arrD = array();
    $arrE = array();
    $arrF = array();
    $arrG = array();
    $arrH = array();
    $arrI = array();
    $arrJ = array();
    $arrK = array();
    $arrL = array();
    $arrM = array();
    $arrN = array();
    $arrO = array();
    $arrP = array();
    $arrQ = array();
    $arrR = array();
    $arrS = array();
    $arrT = array();
    $arrU = array();
    $arrV = array();
    $arrW = array();
    $arrX = array();
    $arrY = array();
    $arrZ = array();

    //Fill the array for that city.
    foreach ($cities as $city){
        $key = substr($city, 0, 1);
        ${"arr".$key}[] = $city;
    }
    //Let's just test this worked.
    var_dump($arrC);
    var_dump($arrB);
    var_dump($arrN);

?>

【讨论】:

  • 使用多维数组优于26个独立变量
  • @Mohammad 我同意这样会更好,但这不是 OP 要求的。
【解决方案3】:

您可以创建一个以首字母为索引的临时多维数组。试一试——

$cities = ['New York', 'Boston', 'Los Angeles', 'Cincinnati', 'Chicago', 'Houston', 'Philadelphia', 'Dallas', 'Seattle'];

foreach($cities as $city) {
    $first = substr($city, 0, 1);
    $temp_cities[$first][] = $city;
}

var_dump($temp_cities);

输出

array(8) {
  ["N"]=>
  array(1) {
    [0]=>
    string(8) "New York"
  }
  ["B"]=>
  array(1) {
    [0]=>
    string(6) "Boston"
  }
  ["L"]=>
  array(1) {
    [0]=>
    string(11) "Los Angeles"
  }
  ["C"]=>
  array(2) {
    [0]=>
    string(10) "Cincinnati"
    [1]=>
    string(7) "Chicago"
  }
  ["H"]=>
  array(1) {
    [0]=>
    string(7) "Houston"
  }
  ["P"]=>
  array(1) {
    [0]=>
    string(12) "Philadelphia"
  }
  ["D"]=>
  array(1) {
    [0]=>
    string(6) "Dallas"
  }
  ["S"]=>
  array(1) {
    [0]=>
    string(7) "Seattle"
  }
}

要查找以“C”开头的城市 - var_dump($temp_cities['C'])

【讨论】:

  • 谢谢,这解决了我的问题,在我看来是最好的方法。我的观点是避免无用的代码重复。再次感谢。
【解决方案4】:

请试试这个

<?php

$cities = ['New York', 'Boston', 'Los Angeles', 'Cincinnati', 'Chicago', 'Houston', 'Philadelphia', 'Dallas', 'Seattle'];
$new_array = [];
$search_string = 'C'; // Letter to search
foreach ($cities as $city) {
    if (strpos($city, $search_string) === 0) {
        $new_array[] = $city;
    }
}
print_r($new_array);// New array will contian list of identified cities
?>

【讨论】:

    【解决方案5】:
    usort($cities, function($a, $b){
        return $a <=> $b;
    });
    

    【讨论】:

    • 或者,你知道,只是sort($cities)。但无论哪种方式排序都不是问题所在。
    猜你喜欢
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多