【问题标题】:Function in Python to PHPPython中的函数到PHP
【发布时间】:2011-12-17 15:03:59
【问题描述】:

有人知道如何将此函数从 Python 转换为 PHP 吗?

我一直在使用它,但 Python 代码中有一些我无法弄清楚的东西。

此函数用于以下上下文: http://www.dmcloud.net/doc/api/general.html#authentication

def normalize(input=None):
output = ''

if type(input) in (list, tuple):
    for element in input:
        if type(element) in (dict, list, tuple):
            element = normalize(element)
        output += str(element)

elif type(input) is dict:
    keys = input.keys()
    keys.sort()
    for key in keys:
        element = input[key]
        if type(element) in (dict, list, tuple):
            element = normalize(element)
        output += '%s%s' % (key, element)

else:
    output = str(input)

return output

谢谢!

【问题讨论】:

  • 你能详细说明这个函数是如何使用的,以及你打算如何在 PHP 中使用它吗?它使用不直接翻译的特定于语言的 Python 功能。
  • 它确实将 json 内容转换为没有任何空格等的递归文本。请看这里的示例:dmcloud.net/doc/api/general.html#authentication

标签: php python normalize


【解决方案1】:

php没有字典和元组/列表的区别,所以:

function normalize($input=null) {
  if (! is_array($input)) {
    return strval($input);
  }

  $res = '';
  $keys = array_keys($input);
  sort($keys);
  foreach ($keys as $k) {
    if (!is_int($k)) $res .= $k;
    $res .= normalize($v);
  }
  return $res;
}

值得注意的是,这种序列化很糟糕,因为它无法区分整数和数字。你真的应该使用 JSON(在 phpPython 中),这是一种独立于语言、人类可读的序列化格式。

与其使用此字符串进行身份验证,不如简单地在 JSON 序列化上使用 hash

【讨论】:

  • 谢谢。我已经在原始帖子中添加了链接。目的是打破 JSON 可读格式以进行身份​​验证。
  • @PGZ 我已经看到了,并添加了一段关于这也是一个坏主意的段落。这个 php 代码对你有用吗?
  • @PGZ 对不起,我不明白。 JSON代码到底是什么意思? JSON序列化?输入结构?请注意,Python 代码也不会更改任何一个。
  • 如果我将 JSON 代码放在“call”:“media.get_assets”,“args”:{“a”:“b”} 上,它不会影响它。
猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
相关资源
最近更新 更多