【问题标题】:How i can get the numbers on the left and the right of the given element?我如何获得给定元素左侧和右侧的数字?
【发布时间】:2015-06-09 17:51:31
【问题描述】:

给定一个字符串:

$pages = "1,2,3,4,5,6";

创建一个获取给定元素左侧和右侧数字的函数。 我期望这个输出:

pagination(1); // array('prev' => null, 'next' => 2);
pagination(2); // array('prev' => 1, 'next' => 3);
pagination(6); // array('prev' => 5, 'next' => null);

我不想使用 explode() 我只想使用 只使用字符串操作函数。 这是我尝试过的,但是是 8 apear ......我需要看看,',' 之间的 5

<?php
$number = "5";
$pages = "1,2,3,4,5,6";
$x = strpos($pages, $number);

echo $x;

?>

【问题讨论】:

  • explode() 是一个字符串操作函数...
  • 我强烈建议使用explode,否则当你有超过9个数字时,它会非常复杂。
  • 确实如此,但是这可以是一个 500 字

    例如。

  • 闻起来很像家庭作业或基础编程考试,尤其是“我不想使用explode()”部分……只是说……
  • strtok 可能是您需要的。

标签: php arrays string pagination numbers


【解决方案1】:

还没有测试过,但我认为这可以给你一个想法。

这不适用于 >= 10 的数字。

function get_near_elems($number = 5)
 {
        $pages = "1,2,3,4,5,6";
        $x = strpos($pages, $number);

        if($x == 0)
          return array('prev' => null, 'next' => $pages[$x]);
        else if($x == (strlen($pages) - 1))
          return array('prev' => $pages[$x - 2], 'next' => null);
        else
             return array('prev' => $pages[$x - 2], 'next' => $pages[$x + 2]);
}

因为这看起来像家庭作业,我建议你把你在这里看到的东西拿过来修改一下。

【讨论】:

  • $pages[$x - 1](与 +1 相同)将导致选择“,”,因为它是字符串中的下一个字符。所以它必须是 -2/+2 并且这不适用于 9 以上的数字...
  • 是的,我更正了。他没有具体说明它是否必须适用于大于 10 的数字。
  • 是的,抱歉重叠。仍然会被超过 9 的数字打破,因为那将是两个字符长。
  • 对,如果数字从不 > 9,那很好。只是看不到不使用数组的理由。
【解决方案2】:

explode() 会有所帮助,但考虑到限制:

混合 strpos ( 字符串 $haystack , 混合 $needle [, int $offset = 0 ] )

给出索引在字符串中的位置,尝试使用str_replace()删除','

// removes ',' from string
str_replace(',', '', $pages); 

结果为“123456”,然后strpos($pages, $number) 将为您提供索引位置 4 的索引。给定验证(边界检查),即。 &gt; 0&lt; strlen(..),你可以用 -1 和 +1 得到上一个和下一个。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    我会使用类似下面的函数,只需要确保 pages 变量在函数中是可访问的。

    function getPreviousAndNext($number)
    {
        $location = strpos($pages, number);
    
        $previous = ($number > 0 ? substr($pages, ($location - strlen($number - 1)), strlen($number - 1) + 1) : null);
        $next = ($number == strlen($pages) - 1 ? null : substr($pages, ($location + strlen($number + 1)) + 1, strlen($number + 1));
    
        return [
            "previous" => $first,
            "next" => $last
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 1970-01-01
      • 2021-04-09
      • 2012-08-13
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多