2016-05-17 86 views
2

我檢查了幾個類似的問題,如this,thisthis,但仍然不清楚,我可以通過深層嵌套數組內的操作獲得穩固的值,而不是調用函數或分配變量?作爲數組值的函數結果

作爲示例下面以在$arr['row']第一位置插入取決於$s

$s = true; //or false; 
$arr = [ 
    'key1'=>'val1', 
    'key2'=>'val2', 
    'row'=>[ 
    function($s){ 
     if($s) return array('x'=>'y',...); 
     else return null; 
    }, 
    [ 
     'row2a'=>'val2a', 
     'row2b'=>'val2b', 
    ], 
    [ 
     'row3a'=>'val3a', 
     'row3b'=>'val3b', 
    ], 
    ], 
]; 

// Output: 
Array(
    ... 
    [row] => Array 
    (
     [0] => Closure Object 
      (
       [parameter] => Array 
        (
         [$s] => 
        ) 
      ) 
     [1] => Array 
      (
       [row2a] => val2a 
       [row2b] => val2b 
      )  
    ... 

$arr['row'][0]得到Closure Objectarray('x'=>'y',...)。或者無法通過數組中的操作獲取值,但調用函數或傳遞變量?謝謝。

+0

我不知道爲什麼你不能簡單地執行這個函數在數組創建之外,並將結果放在需要它的地方?你是否有什麼特別的理由想要擁有這樣的結構? –

+0

它已經在功能和我有更多的地方像這樣的,意味着我需要只有幾碼之外創建更多的功能來獲取值.. – James

回答

1

如果這是你需要什麼,你總是可以試試這個方法:

$s = 1; 
$value = call_user_func(function($s) { return $s; }, $s); 

var_dump($value); 

同時會產生:

int(1) 
+0

它的工作原理。非常感謝。 – James

0
Try below code 
$s=true; 

function abc($flag) { 
    if ($flag): 
     $array["x"]="x"; 
     $array["y"]="y"; 
     return $array; 
    else: 
     return null; 
    endif; 
} 
$arr = [ 
    'key1' => 'val1', 
    'key2' => 'val2', 
    'row' => [ 
     $resultset = abc($s), 
     [ 
      'row2a' => 'val2a', 
      'row2b' => 'val2b', 
     ], 
     [ 
      'row3a' => 'val3a', 
      'row3b' => 'val3b', 
     ], 
    ], 
]; 
print_r($arr); 
exit; 
output 
Array 
(
    [key1] => val1 
    [key2] => val2 
    [row] => Array 
     (
      [0] => Array 
       (
        [x] => x 
        [y] => y 
       ) 

      [1] => Array 
       (
        [row2a] => val2a 
        [row2b] => val2b 
       ) 

      [2] => Array 
       (
        [row3a] => val3a 
        [row3b] => val3b 
       ) 
     ) 
)