PHP - 从其他键获取键值
PHP - Get key value from other key
我有以下数组:
$array = Array(
"0" => Array (
"id" => 1081,
"name" => "John"
),
"1" => Array (
"id" => 1082,
"name" => "Matt"
),
"2" => Array (
"id" => 1083,
"name" => "Roger"
)
);
如果我只知道 id
而不必遍历数组,我是否可以得到 name
?
您可以创建一个引用相同元素的关联数组,然后使用它:
function make_assoc(&$array, $keyname) {
$new_array = array();
foreach ($array as &$elt) {
$new_array[$elt[$keyname]] = $elt;
}
return $new_array;
}
$assoc_array = make_assoc($array, 'id');
现在您可以使用$assoc_array[1083]
访问原始数组中的第三项。由于这个 returns 一个引用数组,修改它也会修改原始数组的元素。
对于 PHP >= 5.5.0:
$id = 1082;
$result = array_column($array, 'name', 'id')[$id];
正如 Barmar 指出的那样,要获得一个以 id
作为索引的易于使用的数组:
$id = 1082;
$result = array_column($array, 'name', 'id');
echo $result[$id];
如果您的 PHP < 5.5.0 并且您没有 array_column
:
,您可以使用 array_map
搜索您的数组
<?php
$array = Array(
"0" => Array (
"id" => 1081,
"name" => "John"
),
"1" => Array (
"id" => 1082,
"name" => "Matt"
),
"2" => Array (
"id" => 1083,
"name" => "Roger"
)
);
$find = 1082;
$value = '';
$arr = array_map(function($n) use ($find, &$value) {if ($n['id'] == $find) $value = $n['name']; }, $array);
print_r($value);
?>
我有以下数组:
$array = Array(
"0" => Array (
"id" => 1081,
"name" => "John"
),
"1" => Array (
"id" => 1082,
"name" => "Matt"
),
"2" => Array (
"id" => 1083,
"name" => "Roger"
)
);
如果我只知道 id
而不必遍历数组,我是否可以得到 name
?
您可以创建一个引用相同元素的关联数组,然后使用它:
function make_assoc(&$array, $keyname) {
$new_array = array();
foreach ($array as &$elt) {
$new_array[$elt[$keyname]] = $elt;
}
return $new_array;
}
$assoc_array = make_assoc($array, 'id');
现在您可以使用$assoc_array[1083]
访问原始数组中的第三项。由于这个 returns 一个引用数组,修改它也会修改原始数组的元素。
对于 PHP >= 5.5.0:
$id = 1082;
$result = array_column($array, 'name', 'id')[$id];
正如 Barmar 指出的那样,要获得一个以 id
作为索引的易于使用的数组:
$id = 1082;
$result = array_column($array, 'name', 'id');
echo $result[$id];
如果您的 PHP < 5.5.0 并且您没有 array_column
:
array_map
搜索您的数组
<?php
$array = Array(
"0" => Array (
"id" => 1081,
"name" => "John"
),
"1" => Array (
"id" => 1082,
"name" => "Matt"
),
"2" => Array (
"id" => 1083,
"name" => "Roger"
)
);
$find = 1082;
$value = '';
$arr = array_map(function($n) use ($find, &$value) {if ($n['id'] == $find) $value = $n['name']; }, $array);
print_r($value);
?>