2013-10-30 57 views
-3

我在PHP中有一個數組$decoded。這裏的數組:PHP陣列抽取

Array ( 
    [0] => Ú 
    [1] => Ý 
    [2] => æ 
    [3] => â 
) 

我怎樣才能extract數組,並將其分配到一個變量?
我試圖用extract()函數,它的工作原理。 但我的問題是:數組的索引號是動態的。
任何機構都想幫忙嗎?
UPDATE

這裏是我的PHP試驗:

<?php 
$str = "admin"; 
echo $str."<br>"; 
$jc = strlen($str)-1; 
for ($i=0;$i<=$jc;$i++){ 
echo $chr = substr($str,$i,1); 
$an = ord($chr); 
$asli = ord($chr); 
if ($an >=65 and $an <= 90){ 
$an = $an+127; 
} 
if ($an >=97 and $an <= 122){ 
$an = $an+121; 
} 
if ($an >=48 and $an <= 57){ 
$an = $an+196; 
} 
if ($an == 32){ 
$an = 32; 
} 
    $decoded[$i] = chr($an); 
    echo " =>$asli => $an => ".$decoded[$i]."<br>"; 
} 

?> 

結果是:

admin 
a =>97 => 218 => Ú 
d =>100 => 221 => Ý 
m =>109 => 230 => æ 
i =>105 => 226 => â 
n =>110 => 231 => ç 

我想assgin解碼字符(U,Y,æ,Ⅰ, ç)變成一個變量。
所以,我的目標是解碼字符串adminÚÝæâç。如上所述,變量$str是動態的。

+1

你能告訴你的代碼已經編寫到現在?對於我來說,目前還不清楚你到底想做什麼。這個數組是一個PHP變量還是純文本? – TiMESPLiNTER

+1

首先:爲什麼?你想通過提取數組來解決什麼問題,以及如果你的問題顯然無法預測結果,你期望結果如何? – deceze

+2

http://php.net/manual/bg/function.list.php –

回答

3

您只需將字符串:

<?php 

$str = "admin"; 

echo $str."<br>"; 

$length = strlen($str); 

$newstr = ""; 

for ($i = 0; $i < $length; $i++) { 
    echo $chr = $str[$i]; 

    $an = ord($chr); 

    if ($an >=65 and $an <= 90) { 
     $an = $an+127; 
    } 

    if ($an >=97 and $an <= 122) { 
     $an = $an+121; 
    } 

    if ($an >=48 and $an <= 57) { 
     $an = $an+196; 
    } 
    if ($an == 32) { 
     $an = 32; 
    } 

    $newstr .= chr($an); 
} 

echo $newstr; 
+0

哦,謝謝..它工作正如我希望:D –

+0

但我有一個問題與字符「。」。在'$ newstr。= chr($ an)'中。 json會將其視爲錯誤,所以json說:意想不到的字符。 –

+0

如果你想這是json,你必須編碼它'echo json_encode($ newstr);' – kelunik

3

嘗試這樣,它會創建varibale的數組:

$array = Array ( 
    [0] => Ú 
    [1] => Ý 
    [2] => æ 
    [3] => â 
); 
extract($array, EXTR_PREFIX_ALL, 'var'); 
$defined_vars = get_defined_vars(); 
print_r($defined_vars); 

我知道這是不是正是你要找的,但是可以從中得到一些想法。

+0

感謝您的回答,但我認爲kelunik的答案更容易做到,而且很有效。 :D –

1

我只是補充一下。轉換不常用字符的字符時,您會遇到一些問題。
我試過你的腳本。你的角色會被一個不確定的角色加倍或減少,而ASCII碼(64)將被減去64,所以你的總和爲64來得到你的角色。
這裏的解決方案:

 $pwd = "AzsOke"; 
     $jc = strlen($pwd)-1; 
     for ($i=0;$i<=$jc;$i++){ 
      if ($i%2 == 1){ 
       $chr = substr($pwd,$i,1); 
       $an = ord($chr); 
       $asli = ord($chr); 
       if ($an >=193 and $an <= 217){ 
        $an = $an-127; 
       } 
       if ($an >=218 and $an <= 243){ 
        $an = $an-121; 
       } 
       if ($an >=244 and $an <= 253){ 
        $an = $an-196; 
       } 
       if ($an == 32){ 
        $an = 32; 
       } 
       $codenumber_pwd .= $an+64;      
      } 
     } 
+1

啊謝謝你,這是我後來發現的問題。但我有另一個解決方案,強制它到ASCII。 –