Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中,如何基于一组运行的数字获取反数值?_Php - Fatal编程技术网

在php中,如何基于一组运行的数字获取反数值?

在php中,如何基于一组运行的数字获取反数值?,php,Php,例如,如果我有N个连续的数字,例如1到7或1到8 左边是我拥有的,右边是我想要转换的: 1 - 7 2 - 6 3 - 5 4 - 4 5 - 3 6 - 2 7 - 1 1 -> 8 2 -> 7 3 -> 6 4 -> 5 5 -> 4 6 -> 3 7 -> 2 8 -> 1 有没有一个简单的算法可以做到这一点 注意:我没有完整的数组,但是在上面的例子中,我有7或8的“基数”,如果真的需要,可以使用它来生成数组 如果有帮助的话,我的用例是

例如,如果我有N个连续的数字,例如1到7或1到8

左边是我拥有的,右边是我想要转换的:

1 - 7
2 - 6
3 - 5
4 - 4
5 - 3
6 - 2
7 - 1

1 -> 8
2 -> 7
3 -> 6
4 -> 5
5 -> 4
6 -> 3
7 -> 2
8 -> 1
有没有一个简单的算法可以做到这一点

注意:我没有完整的数组,但是在上面的例子中,我有7或8的“基数”,如果真的需要,可以使用它来生成数组

如果有帮助的话,我的用例是这样的。我有一个函数,它给我返回一个介于1-7之间的整数值,但在同样的情况下,我需要将该值反转(甚至不确定这是正确的词)(例如,得到一个2意味着它应该转换为一个6)。

解释 我在这里使用的是一个静态方法,使它更易于使用,但可以随意以您想要的方式实现它

这样做的目的只是处理数组的索引。如果数组尚未确定,则必须找到创建该数组的解决方案才能使用它。但你明白我的意思了

解决方案 文档


.

好吧,只需循环递增变量,直到到达基数:

<?php
$base = 7;
for ($i=1; $i<=$base; $i++) {
  echo sprintf("%d - %d".PHP_EOL, $i, $base-$i+1);
}

注意:这些示例用于CLI使用,在web环境中使用时,需要将换行符从
\n
替换为

PHP\u EOL

我不知道我是否了解您在寻找什么,但我认为这应该是一个解决方案:

$array = [1,2,3,4,5,6,7]; //or $array = [1,2,3,4,5,6,7,8]

public function getNumberNotReversed($array, $number) {
    return $array[$number - 1];
}

public function getNumberReversed($array, $number) {
    return array_reverse($array)[$number - 1];
}

echo getNumberNotReversed($array, 2); //print 2 (base 7 or 8)
echo PHP_EOL;
echo getNumberReversed($array, 2); //print 6 (base 7), print 7 (base 8)

希望我能理解。

所以实际上你需要先定义
数组
,然后
反向
数组,然后
将整个数组组合成
键值对
,这样你的代码看起来就像

$main_arr = range(13,37);
$reversed_arr = array_reverse($main_arr);

$arr = array_combine($main_arr,$reversed_arr);

echo $arr[13].PHP_EOL; //37

echo $arr[37].PHP_EOL; //13

print_r($arr);

从只返回1-7之间的整数的函数。当然,我可以编写一个7 if语句来转换它。但是有没有一个“快速”函数已经做到了这一点?你在找吗?我没有数组,只有一个介于1-7之间的整数值返回给我。这是否意味着我每次都必须创建整个排列,然后使用array_flip?真的没有不使用数组就可以将1转换为7和2转换为6的算法吗?您在寻找吗?因为它很不清楚你想要传达什么,所以你可以说范围是13到37。。。当我13岁时,我希望它变成37岁。当我37岁时,我希望它变成13岁。我只知道范围内有24个数字。我能做一些像“24-13*x”这样的事情并神奇地转换它吗?对不起,我数学不好。这是一个有效的方法,但它并没有真正回答问题,它给出了如何解决任务的提示。对不起,但你现在完全改变了你的答案,很抱歉这么说,但目前的版本是有问题的。虽然它可能以某种方式工作(仍然没有真正回答OP的问题…),但它非常无效。。。它不输出一系列数字,但每次调用只输出一对数字。进一步:如果数组只包含递减的整数序列,为什么需要两个单独的数组?你可以很容易地用一个。为什么要使用两种不同的方法?为什么不在构造函数中实现一个静态基值集并计算其余的呢?
<?php
$base = 7;
for ($i=1; $i<=$base,$j=$base-$i+1; $i++) {
  echo sprintf("%d - %d".PHP_EOL, $i, $j);
}
1 - 7
2 - 6
3 - 5
4 - 4
5 - 3
6 - 2
7 - 1
$array = [1,2,3,4,5,6,7]; //or $array = [1,2,3,4,5,6,7,8]

public function getNumberNotReversed($array, $number) {
    return $array[$number - 1];
}

public function getNumberReversed($array, $number) {
    return array_reverse($array)[$number - 1];
}

echo getNumberNotReversed($array, 2); //print 2 (base 7 or 8)
echo PHP_EOL;
echo getNumberReversed($array, 2); //print 6 (base 7), print 7 (base 8)
$main_arr = range(13,37);
$reversed_arr = array_reverse($main_arr);

$arr = array_combine($main_arr,$reversed_arr);

echo $arr[13].PHP_EOL; //37

echo $arr[37].PHP_EOL; //13

print_r($arr);