…». PHP-де сіздің кодты жасаған кезде, бағдарламашы « фрагментте берілген жарамсыз дәлел ...» қате туралы хабарды кездестіруі мүмкін. Осы хабарламадан кейін, әдетте, оның ерекшеліктерін көрсету керек, мысалы, «121-жолда / modules / tasks / todo_tasks_sub.php». Қате әдетте қол жетімді код сегменттің ерекшеліктеріне байланысты және айнымалы мәндерді пайдаланудың ерекшеліктерін тексеруді талап етеді. Қателік факторларына және оны қалай түзетуге болатынын қарастырайық.
Мақала мазмұны:
- Причины появления Invalid argument supplied for foreach 1 foreach үшін жарамсыз дәлел себептері
- Как исправить ошибку «Invalid argument supplied for foreach in» 2 «foreach for invalid argument» қатесін түзету жолы
- Ошибка в WordPress 3 WordPress-те қате
- Заключение 4 Қорытынды
Foreach үшін жарамсыз дәлелдің себептері
Аталған қате, әдетте, foreach орындауға тырысатын ауыспалы (қайталау) массив емес жағдай туындайды. Мысалы, циклды массивке емес, скалярға айналдырасыз немесе қосарланған массивтерді пайдаланасыз және индекс қалай таңдалғандығын ұмытып кетесіз.
Get_user_posts деп аталатын функция бар деп есептейік. Бұл функция пайдаланушы пікірлерінің жиымын қайтаруы керек. Алайда, егер түсініктемелер болмаса, функция FALSE логикалық мәнін қайтарады.
Жоғарыда келтірілген кодта $ posts айнымалысы әрдайым массив болатынын болжадық. Алайда, егер get_user_posts функциясы FALSE логикалық мәнін қайтарса, foreach циклі жұмыс істемейді және PHP келесі қате туралы хабарды шығарады:
Ескерту: 7-жолда foreach () үшін жарамсыз дәлел
Бұл мәселені қалай шешуге болады? Оны анықтайық.
Бұл қызықты: Debian-де PHP 7.0.5- ні орнату.
Қатені «foreach үшін жарамсыз дәлелді» қалай түзетуге болады
Шешім сіздің кодыңыздың қандай екеніне байланысты. Яғни, егер get_user_posts функциясы әрқашан жиынды қайтарса, онда анық, неге ол FALSE логикалық мәнін немесе NULL мәнін қайтару керек екенін білуіңіз керек. Бұған бірнеше себеп болуы мүмкін:
- Бос массивді «default» деп жариялау сәтсіз аяқталды (әдепкі);
- Дерекқорды сұрау сәтсіз аяқталды;
- Массив қайта жазылады немесе қайта орнатылады. Бұл жиі кездесетін сценарийлерде жиі кездесетін массивтерде, жад шектеулері болғанда, және әзірлеуші жұмыс аяқталған массивтерді тастауға мәжбүр болады.
Біреудің кодын қарау арқылы, біз ешқандай нәтиже табылмаған кезде FALSE қайтаратын API және функцияларға кезігуіміз мүмкін. Егер солай болса, онда келесі кодты кодқа қоса аласыз:
Жоғарыда $ posts - массив екендігін тексеру үшін is_array функциясын қолданамыз. Және біз мұны foreach конструкциясы арқылы айналдыруға тырысамыз. Бұрын жазғанымыздай, бұл сіздің сценарийіңіздің мақсатына байланысты. Is_array тексеруін қосу, айнымалы мән массиві болатынынан сұрақ туындаған жағдайда ақылсыз болып табылады. Өйткені, сіз болмайтын қатені жасырасыз.
WordPress қатесі
Сондай-ақ, WordPress тораптары жұмыс істеп жатқанда, «foreach үшін берілген жарамсыз дәлел» қарастырылған қате пайда болуы мүмкін. Мәселе мынада, WP_Block_Parser substr () және strlen () көмегімен бірнеше жолмен манипуляцияларды орындайды, олар мультибит ретпен емес, бір байтпен жұмыс істейтіндігін болжайды.
Қатені шешу WordPress ішіндегі foreach үшін берілген жарамсыз дәлел mbstring.func_overload параметрін 0 мәніне өзгертуге көмектеседі (әдетте 2 шығындар). Жасалған өзгертулерді сақтаңыз және бұрынғы проблемалы бетке өтіңіз.
, и скопировать в аналогичную папку на вашем хостинге. Егер бұл көмектеспесе, WordPress 4.9.5-ні жүктеп көріңіз, одан wp-құрамындағы қалтаны шығарыңыз және оны хостингтегі ұқсас қалтаға көшіріңіз. Осыдан кейін WordPress деректер қорыңызды жаңартуға, келісімге келуге және кэшті тазартқаннан кейін жұмыс істей алады.
Сондай-ақ, қараңыз: WordPress-те xmlrpc.php-ге бірнеше сұраныс.
Қорытынды
PHP-кодта «foreach үшін жеткізілген жарамсыз аргумент» қатесі әдетте массив емес айнымалы себеп болады. Соңғы рет foreach орындауға тырысады, бірақ сәтсіз. Мәселені шешу үшін сіз is_array функциясын қосасыз (ол айнымалы мән массив болып табылатынын тексереді). Сондай-ақ, phpfaq.ru веб-сайтында жалпы анықтамалық материалдарды ұсынуға болады, онда сіз өзіңіз жасаған кодадағы қатені қалай табуға болады.