我正在尋找一種回傳匹配值的資料結構,當輸入是一個整數值時,它只有一個精確的整數匹配。例如,如果我輸入 1,它回傳 2,或者如果我輸入 2,它回傳 1。我已經有一個解決方案(見下文)。但是,我覺得必須有一個格式如下的資料結構:1 <=> 5、3 <=> 6 等。我沒有多年的 PHP 知識,所以我不確定我是否是只是不知道執行此操作的本機資料結構。我也意識到這可能不存在,我只是想確保它不存在。
截至目前,我只有一個陣列,其中包含每個對應值的鍵值對。(我也對 switch 陳述句做了同樣的事情,但它看起來不太干凈)。它看起來像這樣:
function vs_get_matching_number($number){
$matching_numbers = array(
1 => 3,
3 => 1,
4 => 6,
6 => 4
);
return $matching_numbers[(int)$number];
}
uj5u.com熱心網友回復:
Array 確實是最好的選擇,盡管它的名字實際上是一個 Hashmap,這正是你真正想要的。它是一種 PHP 原生型別,可用于任何其他沒有依賴關系的代碼(例如,不需要特殊擴展或附加代碼)。
基于只有單向映射的“源”陣列,您可以這樣做:
function array_flip_merge($arr) {
$result = $arr;
$flip = array_flip($arr);
foreach($flip as $k => $v) {
$result[ $k ] = $v;
}
return $result;
}
$source = [
1 => 3,
4 => 6,
];
$result = array_flip_merge($source);
array_flip() 將創建一個交換鍵和值的第二個陣列。這插入原始陣列將產生所需的輸出陣列。
Array
(
[1] => 3
[4] => 6
[3] => 1
[6] => 4
)
請注意,函式中沒有任何檢查,因此它不會注意到源陣列中的不一致(如果鍵或值之一重復)。但它也可以實作......
uj5u.com熱心網友回復:
看起來你正試圖在任一方向映射數字,你可以做這樣的事情。它仍然使用陣列,但它減少了重復。
- array_search() 可用于根據值查找鍵
- isset() 可用于在回傳值之前檢查鍵是否存在
如果找不到數字,可能會引發例外,這可以通過 try catch 陳述句來處理。
<?php
function vs_get_matching_number($number) {
$matchingNumbers = [
1 =>3,
4 =>6,
];
if(isset($matchingNumbers[$number])) {
return $matchingNumbers[$number];
}
$keyNumber = array_search($number, $matchingNumbers);
if ($keyNumber) {
return $keyNumber;
}
throw new \Exception('Unknown number: '.$number);
}
echo vs_get_matching_number(1) ."\n";
echo vs_get_matching_number(3) ."\n";
echo vs_get_matching_number(4) ."\n";
echo vs_get_matching_number(6) ."\n";
echo vs_get_matching_number(5) ."\n";
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/454717.html
上一篇:marge3個陣列并在horizo??ntalehtml表中顯示資料
下一篇:.HTACCESS添加到slug
