我正试图弄清楚如何将数组中的一堆字母值向下移动一步。例如,我的数组包含值(“d”,“e”,“f”,“g”,“h”),我想将其更改为(“c”,“d”,“e”,“f “, “G”)。这是我正在使用的代码:
function move_up_left($x) {
if($x['orientation'] == "down") {
foreach($x[0] as &$value) {
$value = --$value;
}
} else {
foreach($x[1] as &$value) {
$value = --$value;
}
}
return $x;
}
当我使用正值时,字母会改变;但负数似乎根本不起作用。
答案 0 :(得分:15)
PHP为字符串重载了++
; --
不是这种情况。您可以使用chr
,ord
和array_map
更清晰的代码执行相同的操作:
function decrementLetter($l) {
return chr(ord($l) - 1);
}
function move_up_left($x) {
if($x['orientation'] === 'down') $arr = &$x[0];
else $arr = &$x[1];
$arr = array_map('decrementLetter', $arr);
return $x;
}
Here's a demo.请注意,您可能需要添加一个特殊情况来递减a
- 我不确定您是如何处理的。
答案 1 :(得分:4)
如果你需要减少类似Excel的变量('A','AA',......),这就是我来的功能。它不适用于特殊字符,但不区分大小写。如果您尝试减少“a”或“A”,则返回null。
function decrementLetter($char) {
$len = strlen($char);
// last character is A or a
if(ord($char[$len - 1]) === 65 || ord($char[$len - 1]) === 97){
if($len === 1){ // one character left
return null;
}
else{ // 'ABA'--; => 'AAZ'; recursive call
$char = decrementLetter(substr($char, 0, -1)).'Z';
}
}
else{
$char[$len - 1] = chr(ord($char[$len - 1]) - 1);
}
return $char;
}
答案 2 :(得分:0)
function shift_character($array, $right = FALSE)
{
$inc = ($right) ? 1 : -1;
for ($i = 0; $i < count($array); $i++)
{
$array[$i] = chr(ord($array[$i]) + $inc);
}
return $array;
}
$example = array('b', 'c');
$shift_left = shift_character($example);
$shift_right = shift_character($example, TRUE);
print_r($example);
print_r($shift_left);
print_r($shift_right);