PHP - фильтровать строку массива в алфавитном порядке - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть массив строк

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

Я хочу получить все строки, которые начинаются с буквы A, затем B, затем C и т. Д. Для каждой буквы алфавита.

Каков наилучший способ избежать ненужных повторений кода?

Ответы [ 5 ]

0 голосов
/ 22 ноября 2018

Если я правильно понимаю, вы пытаетесь создать 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 голосов
/ 22 ноября 2018

Вы можете создать временный многомерный массив с первой буквой в качестве индекса.Попробуйте -

$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 голосов
/ 22 ноября 2018

Пожалуйста, попробуйте это

<?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 голосов
/ 22 ноября 2018

Вы можете просто отсортировать массив с

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

sort($cities);
0 голосов
/ 22 ноября 2018
usort($cities, function($a, $b){
    return $a <=> $b;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...