Получение первой буквы в массиве

У меня есть массив, и я пытаюсь получить только те имена, которые начинаются с «L» или «l», чтобы быть выведенными на экран.

$array = array('Leanna', 'nicole', 'Lisa', 'Sarah', 'Leopard', 'Michael', 'jack', 'logan');

foreach($array as $key => $value){
$exp_key = explode('L', $key);
if($exp_key[0] == 'L' || $exp_key[0] == "l"){
$arr_result[] = $value;
}

echo $value . "<br />";
}

но я все равно получаю все значения

-4

Решение

Что не так с вашим кодом?

Это код, который вы разместили в вопросе:

$array = array('Leanna', 'nicole', 'Lisa', 'Sarah', 'Leopard', 'Michael', 'jack', 'logan');

foreach($array as $key => $value){
$exp_key = explode('L', $key);
if($exp_key[0] == 'L' || $exp_key[0] == "l"){
$arr_result[] = $value;
}

echo $value . "<br />";
}

Как это устроено?

На первой итерации $key установлен на номер 0 а также $value это строка 'Leanna',

Заявление $exp_key = explode('L', $key); новообращенные $key в строку '0' и разбивает его на массив строк, используя строку 'L' в качестве разделителя. Так как нет L внутри 0, результатом является массив, который содержит только один элемент: входную строку (array(0 => '0')). Как следствие, $exp_key[0] это строка '0',

Согласно таблица свободных сравнений с использованием ==, строка '0' не равно ни тому, ни другому 'L' ни 'l' и утверждение внутри if блок не выполняется.

echo $value Оператор, однако, выполняется и печатает Leanna<br />,

На следующем цикле $key это число 1 а также $value это строка 'nicole', Обработка работает аналогично первой итерации, сравнения дают тот же результат (false) ничего не хранится в $arr_result а также $value печатается. То же самое происходит снова и снова, пока все элементы $array обрабатываются.

Как заставить это работать

Во-первых, вы не должны заботиться о ключах $array, Это последовательные целые числа, начинающиеся с 0 и они бесполезны для цели.

Затем вы должны сравнить $value[0] против прописных и строчных L, Там нет необходимости explode() все, что тебя волнует, это первый символ каждого значения.

Код может выглядеть так:

$array = array('Leanna', 'nicole', 'Lisa', 'Sarah', 'Leopard', 'Michael', 'jack', 'logan');

// Make sure $arr_result is always an array
// Cannot rely on the assignment inside the loop to initialize it because
// if no value in $array starts with 'L', the statement $arr_result[] = $value
// is never executed and at the end $arr_result is undefined.
$arr_result = array();

foreach ($array as $value) {
if ($value[0] == 'L' || $value[0] == 'l'){
$arr_result[] = $value;
}
}

print_r($arr_result);

Выход:

Array
(
[0] => Leanna
[1] => Lisa
[2] => Leopard
[3] => logan
)

Альтернативные решения

Вы можете использовать функцию PHP array_filter() извлечь из $array только совпадающие значения:

$arr_result = array_filter(
$array,
function ($value) {
return strtoupper($value[0]) == 'L';
}
);

Это решение немного медленнее, чем циклическая обработка массива вручную, но оно более понятно. анонимная функция используется в качестве Перезвоните выполняет только сравнение (фильтрацию) и присваивание $arr_result происходит только один раз, когда array_filter() возвращается. Нет необходимости инициализировать $arr_result больше, потому что array_filter() всегда возвращает массив.

2

Другие решения

Вам нужно использовать $value и не нужно explode(), И ты повторял $value который даст вам все значения, вам лучше использовать $arr_result переменная:

<?php
$array = array('Leanna', 'nicole', 'Lisa', 'Sarah', 'Leopard', 'Michael', 'jack', 'logan');

foreach($array as $key => $value){
if($value[0] == 'L' || $value[0] == "l"){
$arr_result[] = $value;
}
}

print_r($arr_result);

?>

Выход:

Array
(
[0] => Leanna
[1] => Lisa
[2] => Leopard
[3] => logan
)
0

Вы можете использовать встроенную функцию array_map.

array_map — применяет обратный вызов к элементам данных массивов

$array = array('Leanna', 'nicole', 'Lisa', 'Sarah', 'Leopard', 'Michael', 'jack', 'logan');array_map("getEntries", $array);

function getEntries($e) {
if($e[0] == "L" || $e[0] == "l") {
echo $e;
}
}
0

explode (‘l’, $ arr) удаляет l из полученного массива

$arr_result=[];
$array = array('Leanna', 'nicole', 'Lisa', 'Sarah', 'Leopard', 'Michael', 'jack', 'logan');
foreach($array as $key => $value){
if($value[0] == 'L' || $value[0] == "l"){
$arr_result[] = $value;
}

echo $value . "<br />";
}

print_r($arr_result);
0
$array = array('Leanna', 'nicole', 'Lisa', 'Sarah', 'Leopard', 'Michael', 'jack', 'logan');

foreach($array as $value){
$lettersArray = explode('', $value);
if($lettersArray[0] == 'L' || $lettersArray[0] == "l"){
$arr_result[] = $value;
// echo $value . "<br />";  # to echo names as you go
}
}

print_r ($result) // if you want to print all the values as an array at the end

Попробуй это. Но я думаю, что должен быть более простой способ: D

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

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector