Я делаю интернет-магазин для новичков и столкнулся с проблемой. Я написал функцию для простого рисования элемента, если он определен. (поэтому он будет рисовать изображение с его описанием, только если товар действительно был добавлен в мою корзину).
Обратите внимание, что это явно не лучший способ сделать это. Но это должно работать.
Настройка моих предметов. Будет работать только в том случае, если они действительно определены в начале.
$item1 = $_SESSION['item1'];
$item2 = $_SESSION['item2'];
$item3 = $_SESSION['item3'];
$item4 = $_SESSION['item4'];
$item5 = $_SESSION['item5'];
Вызов моей функции:
ValidateCart($item1, 'item1_name', 'item1_size', 'item1_price', 'item1_url');
Моя функция:
function ValidateCart($item, $itemname, $itemsize, $itemprice, $itemurl)
{
$arr = array($item1, $item2, $item3, $item4, $item5);
if (in_array($item, $arr)) {
echo '<br><hr>';
echo $_SESSION[$itemname]; echo '<br>';
echo $_SESSION[$itemsize]; echo '<br>';
echo '€ '; echo $_SESSION[$itemprice]; echo '<br><br>';
$itemurl1 = $_SESSION[$itemurl];
$itemurl2 = str_replace('url(', 'http://vintagefairytale.esy.es/', $itemurl1);
$itemurl3 = str_replace(')', '', $itemurl2);
echo '<img src='; echo $itemurl3; echo '></img>';
echo '<hr>';
}
}
По сути, в моем ValidateCart() я создаю массив со всеми возможными элементами, и если элемент соответствует моему массиву, он будет продолжаться. Однако это не так.
Если я поменяю if (in_array($item, $arr)) на if (in_array($item1, $arr))
это сработает, но это не то, чего я пытаюсь достичь.
Мне нужно, чтобы это работало в функции, но для меня это не имеет смысла, когда я вызываю функцию с подходящими аргументами, она не будет отображаться. Но если бы я сделал проверку внутри своей функции, это сработало бы. Следовательно, теряется смысл использования функции.
Проблема заключалась в том, что мой $item1 $item2 $item3... не будет использоваться в области видимости, не знаю почему, но в этом была проблема. Вызов сеансов внутри моей функции решил эту проблему. Спасибо за помощь!
Не уверен, что понимаю проблему. Но я не понимаю, почему вы извлекаете свои элементы из массива






почему бы вам не использовать $arr вне функции и использовать ее в качестве аргумента.
$arr = array($item1, $item2, $item3, $item4, $item5);
function ValidateCart($item, $itemname, $itemsize, $itemprice, $itemurl, $arr)
{
if (in_array($item, $arr)) {
echo '<br><hr>';
echo $_SESSION[$itemname]; echo '<br>';
echo $_SESSION[$itemsize]; echo '<br>';
echo '€ '; echo $_SESSION[$itemprice]; echo '<br><br>';
$itemurl1 = $_SESSION[$itemurl];
$itemurl2 = str_replace('url(', 'http://vintagefairytale.esy.es/', $itemurl1);
$itemurl3 = str_replace(')', '', $itemurl2);
echo '<img src='; echo $itemurl3; echo '></img>';
echo '<hr>';
}
}
Я взял это вне функции, но не помогает. Но да, лучше воздержаться.
вы говорите, что когда вы меняете $item на $item1, он работает, потому что $item не соответствует массиву, поэтому он не работает, дважды проверьте сценарий, который вы делаете
function ValidateCart($item, $itemname, $itemsize, $itemprice, $itemurl) {
$arr = array($_SESSION['item1'], $_SESSION['item2'], $_SESSION['item3'], $_SESSION['item4'], $_SESSION['item5']);
if (in_array($item, $arr)) {
echo '<br><hr>';
echo $_SESSION[$itemname]; echo '<br>';
echo $_SESSION[$itemsize]; echo '<br>';
echo '€ '; echo $_SESSION[$itemprice]; echo '<br><br>';
$itemurl1 = $_SESSION[$itemurl];
$itemurl2 = str_replace('url(', 'http://vintagefairytale.esy.es/', $itemurl1);
$itemurl3 = str_replace(')', '', $itemurl2);
echo '<img src='; echo $itemurl3; echo '></img>';
echo '<hr>';
}
}
Ваш $item1 и т. д. выходят за рамки функции.
Ага, это было. Большое спасибо. Однако вопрос: почему моя функция не может получить $item1 $item2.... как это объявлено выше + вне функции? В любом случае спасибо за решение!
$_SESSION является суперглобальным в PHP: php.net/manual/de/language.variables.superglobals.php Их можно найти везде. Другие переменные должны быть введены в функцию в качестве параметра.
Если вы работаете с классами, вы можете получить доступ к переменным, которые не входят в область вашей функции, с помощью $this->item1
$arr = array($item1, $item2, $item3, $item4, $item5);все элементы, кроме элемента 1, не входят в область действия функции.