我有这个数组(为了可读性而缩短):
$players = [
["account_id" => 4294967295, "kills" => 0, "deaths" => 0, "assists" => 0],
["account_id" => 101863674, "kills" => 2, "deaths" => 1, "assists" => 3],
["account_id" => 112698809, "kills" => 5, "deaths" => 0, "assists" => 7],
];
我正在尝试搜索具有特定
account_id
的行,以便获取该玩家的 kills
、deaths
和 assists
的值。这是我尝试过的:
function searchForPlayer($id, $array) {
foreach ($array as $key => $val) {
if ($val['account_id'] === $id) {
return $key;
}
}
return null;
}
$player = searchForPlayer($accountid, $players);
但是它每次都会返回
null
。
function searchForPlayer($id, $array) {
foreach ($array as $key => $val) {
if ($val['account_id'] == $id) {
return $key;
}
}
return null;
}
编辑:根据您编辑的数组结构,您可以调用主数组中每个元素的方法。
function mainSearchForPlayer($id, $mainArray) {
foreach($array as $k => $val) {
$result = searchForPlayer($id, $val);
if($result) break;
}
return $result;
}
然后致电:
$player = mainSearchForPlayer($accountid, $array);
=== 在 php 中也按类型进行比较,这意味着如果您传递 '1' 并且数组中的 id 是 1 ,则永远不会等于
否则您可以通过以下方式检查类型:
var_dump($accountid);
如果这是一个字符串值,你可以解析为int:
$accountid = intval($accountid)
尝试这个递归函数:
function array_searchRecursive($needle, $haystack, $path=array()) {
foreach( $haystack as $key => $val ) {
if( is_array($val) && $sub = array_searchRecursive($needle, $val, $path)) {
$path = array_merge($path, array($key), $sub);
return $path;
} elseif($val == $needle) {
$path[] = $key;
return $path;
}
}
return false;
}
使用 PHP8.4 的
array_find()
功能,您不再需要手动编写条件断循环来高效搜索数组值。
此本机函数返回第一个限定数组值(在本例中为整行),或者如果未遇到限定值,则返回
null
。
代码:(演示)
$accountId = 112698809;
var_export(
array_find(
$players,
fn($row) => $row['account_id'] === $accountId
)
);
输出:
array (
'account_id' => 112698809,
'kills' => 5,
'deaths' => 0,
'assists' => 7,
)