2015-02-08 30 views
0

我有一个可变长度的字符串位数组,我需要否定它们。php否定字符串的最佳方法

例如。

输入array("1", "00101", "101", "0000")

输出array("0", "11010", "010", "1111")

有没有一种简单的方法怎么办呢?

+0

你有什么数据类型?这些是真正的比特还是字符串表示? – Mureinik 2015-02-08 18:21:43

+2

如果只是字符串,那么['strtr'](http://php.net/strtr)。 (呃,正确使用它,用交换字符串,而不是数组参数。) – mario 2015-02-08 18:21:47

+0

请你考虑输入的实际格式提供一些代码吗?即G。 '$ bits = array(“1”,“00101”);' – 2015-02-08 18:22:02

回答

0

你可以做到这一点使用strtr功能:

$bites = array("1", "00101", "101", "0000"); 

$output = array_map(function($element){ 
    return strtr($element, array('1', '0')); 
}, $bites); 

print_r($output); 
+0

这工作正常。但是,只有strtr($ element,“1”,“0”)的marios回答比较慢。 – tttpapi 2015-02-08 18:42:41

+0

我编辑我的答案。但是你必须知道这不是一点操作,而是字符串操作。 – 2015-02-08 18:47:47

+0

你说得对。但是这仍然比简单的strtr($ element,“1”,“0”)要慢。当我测试100000个值时,它需要200%的时间。 – tttpapi 2015-02-08 18:51:12

0
foreach ($values as $value) { 
    $negate = intval($value, 2)^0x7FFFFFFF; 
    echo base_convert(strval($negate), 10, 2); 
} 

该代码将处理在范围0..2 -1的所有整数。由于PHP不支持无符号整数,因此-1是可以在所有平台(即32位和64位)上处理的最大值。

如果您的代码保证在64位平台上运行,您可以使用最大值为2 -1的值。

+0

我需要从长度1到长度64取反。 – tttpapi 2015-02-08 18:36:36

+0

如果您的代码保证在64位平台上运行,则可以使用最大2^63-1的值。但是,我认为,另一个答案更适合你,因为它可以处理任意长度的数字。 – 2015-02-08 18:40:44

+0

我测试了它,如果我把字符串0和答案不是1,但1111111111111111111111111111111. – tttpapi 2015-02-08 18:41:19

相关问题