У меня есть файл на PHP с большим массивом и функция, которая ищет массив.
Вот код:
$details = array(
array('fieldID'=>'0','fieldCaption'=>'Address 1','fieldType'=>'text','fieldName'=>'addr1','fieldRequired'=>'1'),
array('fieldID'=>'1','fieldCaption'=>'Address 2','fieldType'=>'text','fieldName'=>'addr2','fieldRequired'=>'1'),
.
.
.
);
if(!function_exists('find_detail'))
{
function find_detail($fieldName)
{
global $details;
var_dump($details); // NULL
foreach ($details as $detail)
{
if($detail['fieldName'] == $fieldName)
{
return $detail['fieldID'];
}
}
return false;
}
}
Он находится внутри одного файла помощника и вызывает var_dump ($ details);возвращается NULL.Я подозреваю, что проблема со сферой охвата.
Большое спасибо
- edit -
Это плохая практика, и лучшим подходом к ее решению будет (как сказал @Gordon) передать массив деталей в функцию.(Предупреждение: существуют более эффективные способы сделать это, например, с помощью array_filter)
if(!function_exists('find_detail_by_field_name'))
{
function find_detail_by_field_name($details, $fieldName)
{
foreach ($details as $detail)
{
if($detail['fieldName'] == $fieldName)
{
return $detail['fieldID'];
}
}
return false;
}
}
И предоставить способ получить детали, упаковка деталей в функцию даст много преимуществ, таких как кэширование, смена источникаи т. д.
function get_details()
{
static $details = array(...)
return $details;
}