在函数中使用变量,该变量未在函数外部定义

时间:2016-01-21 23:08:53

标签: php arrays

我收到了一个错误:

  

注意:未定义的变量:价格

使用此代码:

<?php

$price[1] = 100;

$store[1] = "apple";

function check ($m) {

  if ($m == "apple") {

    $z = $price[1];

  }

  return $z;

}


?>

<?= check( $store[1] ) ?>

不是让$z等于price[1],而是尝试将其设置为不存在的price

如何正确定义它?

4 个答案:

答案 0 :(得分:2)

$price在函数范围内未定义。如果您需要您的函数来访问该变量,可以使用几种方法。最直接的方法是将$price添加为您的函数的另一个参数。

function check ($m, $price) { ...

然后在拨打$price时使用check()数组作为第二个参数:

<?= check( $store[1], $price) ?>

请注意,您的函数中的$price 不是与函数外部相同的变量,而是它的副本。

您可以在PHP文档here中了解有关变量范围的更多信息。最好避免使用global,除非出于某种原因完全必要。在这种情况下,它没有必要。

答案 1 :(得分:1)

您正在询问特定问题 - 这很容易解决 - 但是真的您正在尝试完成比您提供的代码示例更难解决的其他问题。

鉴于您的代码,以及一些&#34;假设&#34;在你可能会去的地方,我会建议更像这样的东西:

$price[1] = 100;
$price[2] = 150;
$price[5] = 225;

$store[1] = "apple";
$store[2] = "orange";
$store[5] = "kiwi";

// Option 1: Global in the variables.  Nothing wrong with it here...
function check ( $m ) {
   global $price, $store;

   $index = array_search( $m, $store );

   return ( isset( $price[ $index ] ) ) ? $price[ $index ] : 0;
}

// usage:
echo check( $store[1] );



// Option 2: Pass in all the variables you need
function check ( $m, $price, $store ) {

   $index = array_search( $m, $store );

   return ( isset( $price[ $index ] ) ) ? $price[ $index ] : 0;    
}

// usage:
echo check( $store[1], $price, $store );



// Option 3: Since you seem to know the index already, just pass THAT in
function check ( $index, $price, $store ) {
   return ( isset( $price[ $index ] ) ) ? $price[ $index ] : 0;    
}

// usage:
echo check( 1, $price, $store );



// Option 4: Globals, plus since you seem to know the index already, just pass THAT in
function check ( $index ) {
   global $store, $price;
   return ( isset( $price[ $index ] ) ) ? $price[ $index ] : 0;    
}


// usage:
echo check( 1 );

答案 2 :(得分:0)

变量未在函数内定义,您需要将函数内所需的所有变量作为参数传递,例如:

$price[1] = 100;
$store[1] = "apple";
function check ($m, $price) {
  if ($m == "apple") {
    $z = $price[1];
  }
  return $z;
}
//use the function
check( $store[1], $price )

答案 3 :(得分:0)

试试这个:

function check ($m) {
  global $price;
  (...)