首页 > 解决方案 > PHP 从键中查找值

问题描述

所以,我试图了解我该怎么做。我很难受。

$arrayChart = array(
array(
    "Name" => "Mike",
    "ID" => "0001234",
    "Hours" => 38
    ),
array(
    "Name" => "Miles",
    "ID" => "0005678",
    "Hours" => 42
    )
);

我希望能够从键值中找到小时数(整数)。问题是我想根据名字的第一个字母找到它。这意味着如果我有“M”,每个以“M”开头的名字我都应该输出他们一周的工作时间并将它们加在一起。

所以,我得到了“M”,我必须从中找到他们的工作时间并添加它们。我怎样才能做到这一点?我尝试使用此功能,但它甚至没有做任何事情。

$name = "M";
foreach($arrayChart as $key){
if($key["Name"] == $name){
    $hours = $key["Hours"];
    break;
 }
}
print_r($hours);

标签: phparraysloops

解决方案


获取 的第一个字符,$key['Name']然后将其与变量 进行比较$name。如果有匹配项,则添加$key['Hours']到变量中。继续对 arrayChart 中的每个项目执行此操作。

$name = "M";
$hours = 0;

foreach($arrayChart as $key){
    if ($key['Name'][0] === $name) {
        $hours += $key["Hours"];
    }   
}
print_r($hours);

示例:https ://rextester.com/VFPH10481

还要看看这个问题:Getting the first character of a string with $str[0]

编辑

如果$name = "Mike"是要求,您可以这样做:

$name = 'M';
$hours = 0;

foreach($arrayChart as $key){
    
    $foundAtPosition = strpos($key['Name'], $name);
    if ($foundAtPosition === false ||
        $foundAtPosition > 0) {
        continue;
    }
    
    $hours += $key["Hours"];
}
print_r($hours);

示例:https ://rextester.com/ZHCG76001

说明:查看strpos函数的手册。使用该功能,您可以$name$key['Name']. 如果没有找到,strpos 将导致 false。如果找到了,strpos 会告诉你在哪里找到的。

strpos 将显示0是否$name出现在开头。使用该逻辑,如果 strpos 的结果为假或大于 0,您可以要求循环跳过。否则,您可以计算小时数。

如果您想要不区分大小写的搜索,请改用stripos函数。

编辑 2

如果您想提取 ID 和小时数,您可以这样做:

$name = 'M';
$hours = 0;
$ids = array();

foreach($arrayChart as $key){

    $foundAtPosition = strpos($key['Name'], $name);
    if ($foundAtPosition === false ||
        $foundAtPosition > 0) {
        continue;
    }   

    $hours += $key["Hours"];
    $ids[] = $key['ID'];
}
echo $hours . "\n";
echo join(',', $ids) . "\n";

示例:https ://rextester.com/ZRIC46050

说明:我们创建一个名为 的空数组变量$ids。当我们找到匹配项时,我们将 Mike 或 M(或任何您匹配的对象)的 ID 添加到数组中。$ids[] = 'something'意味着,something在 $ids 变量的末尾添加。要将该变量打印为逗号分隔值,请使用该join函数,该函数在上述代码中使用逗号连接数组的每个项目。


推荐阅读