2015-02-08 55 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

相關問題