我有一个阵列,我试图只获得以" L"开头的名字。或" l"为了得到回应。
{{1}}
但我仍然获得所有值
答案 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 function的callback仅进行比较(过滤),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
你的代码有问题的是你在循环中的每次迭代中回显每个值,只有在它正确的情况下才将它添加到数组中。