如何为全局变量设置别名

时间:2018-08-08 22:36:06

标签: php variables foreach

对不起。我在这件事上很新。我试图创建一个全局变量以在不同位置显示内容。

$array = array('3 January 2018 - Month - Month of Circumstances',
            '2 February 2018 - Month - A New Advancement', 
            '1 March 2018 - Month - The Threat',
            '31 April 2018 - Month - Month of Prediction',
            '30 May 2018 - Month - Seven Days');

$new_array = array();
foreach($array as $item) 
{
  echo preg_replace_callback('/.*-\s*(.*)/', function($match)
  {
    $new_array[] = 'My.Item.' . preg_replace('/\W+/', '.', $match[1]);
  }, $item) . PHP_EOL;
}

print_r($new_array);

结果只是:

Array
(
)

2 个答案:

答案 0 :(得分:1)

如@fubar所述,您$new_array不在范围内,您将无法在闭包函数中访问它。您可以将代码更改为类似这样的内容。

$array = array('3 January 2018 - Month - Month of Circumstances',
            '2 February 2018 - Month - A New Advancement', 
            '1 March 2018 - Month - The Threat',
            '31 April 2018 - Month - Month of Prediction',
            '30 May 2018 - Month - Seven Days');

$new_array = array();
foreach($array as $item) 
{
  $new_array[] = preg_replace_callback('/.*-s*(.*)/', function($match)
  {
     return 'My.Item.' . preg_replace('/W+/', '.', $match[1]);
  }, $item) . PHP_EOL;
}

print_r($new_array);

答案 1 :(得分:0)

要访问函数内部的外部变量,请使用use()声明。

foreach($array as $item) 
{
  echo preg_replace_callback('/.*-\s*(.*)/', function($match) use(&$new_array)
  {
    $new_array[] = 'My.Item.' . preg_replace('/\W+/', '.', $match[1]);
  }, $item) . PHP_EOL;
}

&必须使其成为对同一变量的引用,而不是副本,因此您可以在函数内部对其进行修改。