获取数组中的第一个字母

时间:2017-08-10 10:36:23

标签: php arrays

我有一个阵列,我试图只获得以" L"开头的名字。或" l"为了得到回应。

{{1}}

但我仍然获得所有值

5 个答案:

答案 0 :(得分:2)

您的代码有什么问题?

这是您在问题中发布的代码:

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

根据table of loose comparisons using ==,字符串'0'不等于'L''l',而if块内的语句不等于echo $value。执行。

然而,执行Leanna<br />语句并打印$key

在下一个循环中,1是数字$value'nicole'是字符串false。处理与第一次迭代类似,比较产生相同的结果($arr_result),$value中不存储任何内容,并打印$array。在处理$array的所有元素之前,会一再发生这种情况。

如何使其发挥作用

首先,您不应该关心0的密钥。它们是以$value[0]开头的连续整数,它们对目标没有任何用处。

然后,您应该将L与大写和小写$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); 进行比较。没有explode()任何内容,您关心的只是the first character of each value

代码可能如下所示:

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

输出结果为:

$array

替代解决方案

您可以使用PHP函数array_filter()仅从$arr_result = array_filter( $array, function ($value) { return strtoupper($value[0]) == 'L'; } ); 中提取匹配值:

$arr_result

此解决方案比手动循环数组略慢,但更清晰。用作anonymous functioncallback仅进行比较(过滤),array_filter()的分配仅在$arr_result返回时发生一次。无需再初始化array_filter()因为{{1}}总是返回一个数组。

答案 1 :(得分:0)

您需要使用actionPerformed而不需要$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);

?>

答案 2 :(得分:0)

您可以在函数array_map中使用buildt。

  

array_map - 将回调应用于给定数组的元素

#outer-div {
   height: 80px;
   width: 100px;
   border: 1px solid red;
}
#first-div {
   width: 50%;
   height: 100%;
   border-right: 2px solid #619e38;
   float: left;
}
#cell-icon {
   border: 1px solid blue;
   display: inline-block;
   margin-left: -35px;
   margin-top: 28px;
}

答案 3 :(得分:0)

explode('l',$ arr)从结果数组中删除l

foo?para=0

答案 4 :(得分:-1)

$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

你的代码有问题的是你在循环中的每次迭代中回显每个值,只有在它正确的情况下才将它添加到数组中。