2014-02-25 87 views
0

我已動態生成的陣列$array[],這可能是多方面的,我有返回串的函數,其中包含在陣列地址(現有的)。我的問題是:如何創建或字符串轉換$a = 'array[1]'解決$array[1]轉換字符串數組地址

例子:

$array = [1,2,3,4]; 
$string = 'array[2]'; 

function magic($array, $string){ 
//some magic happens 
return $result; 

$result = magic($array, $string); 
echo $result; 
// and 3 is displayed; 

是否有一個功能已經做到這一點?是否有可能做到這一點?

+1

它應該是$灑string =&$ array [2];這是一個參考:http://php.net/manual/en/language.references.php –

+1

'回聲的eval(「$」 $字符串);' –

+0

EVAL似乎是正確的路要走,也許使用參考所以你可以改變它的值。 –

回答

0

此代碼是ResponseBag::get()從精彩HttpFoundation項目的修改:

function magic($array, $path, $default = null) 
{ 
    if (false === $pos = strpos($path, '[')) { 
     return $array; 
    } 

    $value = $array; 
    $currentKey = null; 

    for ($i = $pos, $c = strlen($path); $i < $c; $i++) { 
     $char = $path[$i]; 

     if ('[' === $char) { 
      if (null !== $currentKey) { 
       throw new \InvalidArgumentException(sprintf('Malformed path. Unexpected "[" at position %d.', $i)); 
      } 

      $currentKey = ''; 
     } elseif (']' === $char) { 
      if (null === $currentKey) { 
       throw new \InvalidArgumentException(sprintf('Malformed path. Unexpected "]" at position %d.', $i)); 
      } 

      if (!is_array($value) || !array_key_exists($currentKey, $value)) { 
       return $default; 
      } 

      $value = $value[$currentKey]; 
      $currentKey = null; 
     } else { 
      if (null === $currentKey) { 
       throw new \InvalidArgumentException(sprintf('Malformed path. Unexpected "%s" at position %d.', $char, $i)); 
      } 

      $currentKey .= $char; 
     } 
    } 

    if (null !== $currentKey) { 
     throw new \InvalidArgumentException(sprintf('Malformed path. Path must end with "]".')); 
    } 

    return $value; 
} 

echo magic([1,2,3,4], 'array[2]'); // 3 

它可以進行修改,以返回一個引用爲好,只是一些連詞符號:)

+0

這是完美的工作 - 謝謝。 – ar2rs

相關問題