如何在函数中调用数组? PHP

时间:2009-04-30 23:45:04

标签: php arrays

全局范围允许您在函数外部定义的函数中使用变量。例如

$a=1;
function $test(){
echo $a;
}

//outputs 1

但为什么如果我用数组定义一个变量,我不能以同样的方式使用它?

$test = array(
0=>'zero', 
1=>'one', 
2=>'two',
3=>'three', 
);

function doesntWork($something){
echo "My favorite number is " . $test[$something]; 
}

//outputs My favorite number is 0

如何将数组传递给函数,而不必将数组重新复制到函数本身。

任何解释都将不胜感激 感谢

3 个答案:

答案 0 :(得分:4)

脚本#1不正确。它既不起作用(函数** $ ** test(){...}),也不输出“1”。和全局变量是不好的做法。将它们包装在一个类中与它无关。 类不是与面向对象无关的随机问题的解决方案。

只需传递$ a作为参数:

<?php 
  $a=1; 
  function test($foo) { 
    echo 'number ' . $foo; 
  }; 

  test($a);
  // -> "number 1". 
 ?>

脚本#2:

<?php
  $test = array(
    0=>'zero', 
    1=>'one', 
    2=>'two',
    3=>'three', 
  );

  function doesntWork($test, $something){
    echo "My favorite number is " . $test[$something]; 
  }

  doesntWork($test, mt_rand(0,3));
?>

答案 1 :(得分:3)

你的第一个例子不应该输出1.在特定函数中使变量全局化的唯一方法是使用如下的global关键字:

function test() {
    global $a;
    echo $a;
}

function doesWork($something) {
    global $test;
    echo "My favorite number is " . $test[$something]; 
}

此处有更多信息:http://ca2.php.net/manual/en/language.variables.scope.php

答案 2 :(得分:0)

PHP没有隐式的全局范围;您必须使用global关键字来访问“全局”变量。

$ a输出1可能是由于PHP对变量的可疑处理错综复杂。