Функция Array выдает ошибки - PullRequest
0 голосов
/ 22 ноября 2018

Приведенная ниже функция была изобретена для извлечения файла .csv, считывания столбца и преобразования его значений в массив.Затем, если $category - в данном случае «принтеры» - встречается в массиве, return "shipping-for-medium-sized-goods";.

function get_ship_class($category){
    $csv = array_map("str_getcsv", file("https://siliconharvest.com.au/cassius-files/Shipping%20Classes.csv", "r")); 
    $header = array_shift($csv); 

    // Seperate the header from data
    $col = array_search("medium_shipping_class", $header); 

    // Pass the extracted column back to calling method
    return array_column($csv,$col); 

    if ( in_array( $category, get_ship_class() )) {
   return "shipping-for-medium-sized-goods";
    }
}

Затем я запускаю функцию:

        get_ship_class("printers"); 
    // Note you can access the CSV file at that URL in the function above; 
    // See that"printers" is a value that occurs in the "medium_shipping_class" column
    // Therefore we have a match for if ( in_array( $category = "printers", get_ship_class() ))

Тем не менее, я получаюошибка:

Предупреждение: file () ожидает, что параметр 2 будет целочисленным, строка указана в /home/ptrcao/public_html/siliconharvest/wp-content/uploads/wpallimport/functions.php в строке 147

Предупреждение: array_map (): аргумент # 2 должен быть массивом в /home/ptrcao/public_html/siliconharvest/wp-content/uploads/wpallimport/functions.php в строке 147

Предупреждение: array_shift () ожидает, что параметр 1 будет массивом, значение NULL указано в /home/ptrcao/public_html/siliconharvest/wp-content/uploads/wpallimport/functions.php в строке 148

Предупреждение: array_search () ожидает параметр2 - массив, значение NULL в /home/ptrcao/public_html/siliconharvest/wp-content/uploads/wpallimport/functions.php в строке 151

Внимание: array_column () ожидает, что параметр 1 будет массивом, значение NULLданные в / home / ptrcao / public_html / silicharvest / wp-content / upзагружает / wpallimport / functions.php в строке 154

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018
<?php
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
function get_ship_class($category){
    $csv = array_map("str_getcsv", file("https://siliconharvest.com.au/cassius-files/Shipping%20Classes.csv"));
    $header = array_shift($csv);
    // Seperate the header from data
    if(in_array( "medium_shipping_class" ,$header)){
        $col = array_search("medium_shipping_class" ,$header);
        if($col = 'false'){
            $col = '0';
        }
    }

    // Pass the extracted column back to calling method

    return array_column($csv,$col);
}


print_r(get_ship_class('printers'));

Сначала это выглядело проще, но возникла эта проблема с логическим значением.Итак, позвольте мне объяснить немного.За исключением проблемы с файлом, когда вы передавали строку в качестве второго параметра (не знаю, почему вы это сделали), при движении вперед у вас будет проблема с $col.Из-за того, что ваш элемент находился в 1-й позиции массива, 0 будет преобразовано в false (логическое значение).Поэтому я немного поработал, чтобы сначала убедиться, что искомое значение находится в массиве, а после получения его позиции и, если оно ложно, преобразовать его в 0.

  if ( in_array( $category, get_ship_class() )) {
   return "shipping-for-medium-sized-goods";
    }

Эта часть, которую я только что вынул, недоступна в любом случае.Он приходит после вашего возвращения, поэтому вы никогда не сможете добраться туда.Функция returns значений и ничего после этого не происходит.Считайте что-то вроде die();.Более того, результат вывода будет таким:

Array ( [0] => printers [1] => monitors [2] => cases )
0 голосов
/ 22 ноября 2018

Как говорит @ Maio290, ошибки очень очевидны:

В качестве второго параметра вы используете строку "r", а не целое число:

http://php.net/manual/en/function.file.php

Флаги

Вам необходимо целое число или одна из следующих констант:

FILE_USE_INCLUDE_PATH Поиск файла в include_path.Я думаю, что это 1.

FILE_IGNORE_NEW_LINES Пропустить символ новой строки в конце каждого элемента массива. Я думаю, что это 2.

FILE_SKIP_EMPTY_LINES Пропустить пустые строки.Я думаю, что это 3.

Устранение, которое может решить другие ошибки, но если нет, или, если возникнут вопросы, дайте мне знать, и я сделаю все возможное, чтобы расширить свой ответ, чтобы помочь вам.

...