python到php代码转换

python到php代码转换,php,python,converter,Php,Python,Converter,我必须将两个Python函数翻译成PHP。第一个是: def listspaces(string): return [i -1 for i in range(len(string)) if string.startswith(' ', i-1)] 我假设这将检查所提供字符串中的空格,并在找到第一个空格时返回True,是否正确 这里的i-1是什么?是不是-1 在PHP中,我们对数组使用[]。这里是带有返回的[],此函数将返回true或false或空格位置数组吗 第二个功能是 de

我必须将两个Python函数翻译成PHP。第一个是:

def listspaces(string):
        return [i -1 for i in range(len(string)) if string.startswith(' ', i-1)]
我假设这将检查所提供字符串中的空格,并在找到第一个空格时返回True,是否正确

这里的
i-1
是什么?是不是
-1

在PHP中,我们对数组使用
[]
。这里是带有返回的
[]
,此函数将返回true或false或空格位置数组吗

第二个功能是

def trimcopy(copy, spaces, length=350):

    try:
        if len(copy) < length:
            return copy
        else:
            loc = 0
            for space in spaces:
                if space < length:
                    loc = space
                else:
                    return copy[:loc]
    except :
        return None
def trimpcopy(复制,空格,长度=350):
尝试:
如果长度(副本)<长度:
返回副本
其他:
loc=0
对于空间中的空间:
如果空间<长度:
loc=空间
其他:
返回副本[:loc]
除:
一无所获

空格中的空格是什么:这是什么?返回副本[:loc]

为什么不测试这些函数看看它们在做什么

listspaces(string)
返回一个数组,其中包含字符串中所有空格的位置:

$ ipython
IPython 0.10.2 -- An enhanced Interactive Python.

In [1]: def listspaces(string):
   ...:     return [i -1 for i in range(len(string)) if string.startswith(' ', i-1)]
   ...:

In [2]: listspaces('Hallo du schöne neue Welt!')
Out[2]: [5, 8, 16, 21]
i-1
是开始以零计数时空格的位置)

我对Python了解不多,也不能粘贴第二个函数,因为有太多的“IndentationError”

我认为
trimpcopy()
将返回一个字符串(来自input
copy
),其中数组
空格
(显然是
listspaces()
的返回值)中最后一个空格位置后面的所有内容都将被修剪,除非输入长度不超过
长度。
换句话说:输入在小于
长度的最高空间位置被切断

在上面的例子中,部件
“Welt!”将被切断:

s = 'Hallo du schöne neue Welt!'
trimcopy( s, listspaces( s ) )
/* should return: 'Hallo du schöne neue' */

为什么不测试一下这些函数,看看它们在做什么

listspaces(string)
返回一个数组,其中包含字符串中所有空格的位置:

$ ipython
IPython 0.10.2 -- An enhanced Interactive Python.

In [1]: def listspaces(string):
   ...:     return [i -1 for i in range(len(string)) if string.startswith(' ', i-1)]
   ...:

In [2]: listspaces('Hallo du schöne neue Welt!')
Out[2]: [5, 8, 16, 21]
i-1
是开始以零计数时空格的位置)

我对Python了解不多,也不能粘贴第二个函数,因为有太多的“IndentationError”

我认为
trimpcopy()
将返回一个字符串(来自input
copy
),其中数组
空格
(显然是
listspaces()
的返回值)中最后一个空格位置后面的所有内容都将被修剪,除非输入长度不超过
长度。
换句话说:输入在小于
长度的最高空间位置被切断

在上面的例子中,部件
“Welt!”将被切断:

s = 'Hallo du schöne neue Welt!'
trimcopy( s, listspaces( s ) )
/* should return: 'Hallo du schöne neue' */

第一个函数返回给定字符串中所有空格的索引

  • 范围(len(string))
    在列表中,数字从0到输入字符串的长度
  • 如果为每个索引
    i
    计算string.startswith('',i-1)]
    条件,则当字符串(此处不是关键字)在索引
    i-1所给位置以''开头时,返回true
结果正如feela所公布的那样

对于第二个函数,我不知道空格参数是什么


希望这将帮助您创建一个PHP版本

第一个函数返回给定字符串中所有空格的索引

  • 范围(len(string))
    在列表中,数字从0到输入字符串的长度
  • 如果为每个索引
    i
    计算string.startswith('',i-1)]
    条件,则当字符串(此处不是关键字)在索引
    i-1所给位置以''开头时,返回true
结果正如feela所公布的那样

对于第二个函数,我不知道空格参数是什么


希望这将帮助您创建一个PHP版本

我认为这类转换的一个好方法是:

  • 找出代码在做什么

  • 在Python中将其重构为PHP风格(这使您能够检查逻辑是否仍然有效,例如使用断言测试)。e、 g.将列表理解转换为for循环

  • 转换为PHP

例如,
listspaces(string)
返回空间在
string
中的位置,尽管使用列表理解是Pythonic的,但它不是很“PHP”的

第二个例子,
trimpcopy
相当棘手(因为尝试,除了可能有意捕获一些预期的-对于编写者(!)-异常-两种可能的情况是
string
没有
len
spaces
包含长度大于
len(copy)
)的值,但很难说用Python进行重构并进行测试是个好主意

您可以在PHP中使用
copy[:loc]
进行数组切片


注意:通常在Python中,我们会显式地声明要防御的异常(与之相反)

我认为这类转换的一个好方法是:

  • 找出代码在做什么

  • 在Python中将其重构为PHP风格(这使您能够检查逻辑是否仍然有效,例如使用断言测试)。e、 g.将列表理解转换为for循环

  • 转换为PHP

例如,
listspaces(string)
返回空间在
string
中的位置,尽管使用列表理解是Pythonic的,但它不是很“PHP”的

第二个例子,
trimpcopy
相当棘手(因为尝试,除了可能有意捕获一些预期的-对于编写者(!)-异常-两种可能的情况是
string
没有
len
spaces
包含长度大于
len(copy)
)的值,但很难说用Python进行重构并进行测试是个好主意

您可以在PHP中使用
copy[:loc]
进行数组切片

注:通常用Py表示
def listspaces(str):
    return [i for i, c in enumerate(str) if c==' ']
function listspaces($str) {
    $spaces = array();

    foreach (str_split($str) as $i => $chr)
        if ($chr == ' ') $spaces[] = $i;

    return $spaces;
}
function trimcopy($copy, $spaces, $length=350) {
    if (strlen($copy) < $length) {
        return $copy;
    } else {
        foreach ($spaces as $space) {
            if ($space < $length) {
                $loc = $space;
            } else {
                return substr($copy, 0, $loc);
            }
        }
    }
}