按第一个字母对平面数组的元素进行分组

问题描述 投票:0回答:5

我有一个字符串数组

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

我想检索每个字母开头的所有字符串,先是字母 A,然后是 B,然后是 C,依此类推。

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

php arrays grouping
5个回答
2
投票

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

$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'])


0
投票
usort($cities, function($a, $b){
    return $a <=> $b;
});

0
投票

请尝试这个

<?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
?>

0
投票

如果我理解正确的话,您正在尝试创建 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);

?>

0
投票

您可以简单地使用

对数组进行排序
$cities = ['New York', 'Boston', 'Los Angeles', 'Cincinnati', 'Chicago', 'Houston', 'Philadelphia', 'Dallas', 'Seattle'];

sort($cities);
© www.soinside.com 2019 - 2024. All rights reserved.