Хорошо, у меня, похоже, есть неправильное представление с переменной областью с PHP, простите мою нехватку предмета, поскольку я исхожу из фона Java, С#. Думая, что я могу сделать переменные доступными для функций или если заявления просто, поместив их за пределы. Ниже приведен фрагмент того, что я пытаюсь выполнить:
foreach ($nm as $row=>$im) {
$itm_name = $im;
$lnk = $lnk_cty[$row];
if($mode == 'addMenu') {
$m = $m_id; //id will be coming from fresh insert of menu_name
} else {
$m = $_POST['mnu_add'][$row];
echo "MENU_ID: ".$m;
}
if($mode == 'addCat') {
$m = $c_id; //id will be coming from fresh insert of cat_name
} else {
$m = $_POST['cat_add'][$row];
}
//used for testing purposes
echo "item name: ".$itm_name ."<br />";
echo "lnk: ".$lnk ."<br />";
echo "m: ".$m ."<br />"; //$m is empty here, because its a new declaration as oppose to accessing $m value from if statement
$display_fields .= "<li>".$itm_name." ".$item."</li>";
$sql_array[] = '("' . $itm_name . '", "' . $lnk . '", ' . $m . ')'; // Add a new entry to the queue
}
Теперь то, что я пытаюсь сделать, это сделать значения переменной $m
доступными вне операторов if, входящих в переменную $m
, используемую в инструкции $sql_array[]
. В С# я просто объявляю переменную вне цикла foreach и могу ее использовать. После некоторого чтения по этому вопросу я обнаружил, что использование ключевых слов global или GLOBALS будет работать только в том случае, если моя глобальная переменная сферы присваивает значение перед foreach и объявляет global $m
для получения этого значения в цикле. Но с моим текущим кодом $m
имеет локальную область действия внутри операторов if, и все не рекомендуют использовать их. Итак, есть ли лучший способ сделать $m
доступным для оператора $sql_array[]
?