PHP: ожидает, что параметр будет строковым массивом

0

Я пытаюсь прочитать файл csv за строкой и сохранить его содержимое в массиве. Затем я разбираю массив, используя foreach для печати каждой строки.

Однако, когда я пытаюсь отправить переменную (которая по мне должна быть строкой) к методу deleteInstance, она печатает как массив, а не просто строку.

У меня проблема отправки этого в Softlayer API, так как он бросает мне ошибку, говорящую строкой, ожидаемой, но массив задан? Я не уверен, что не так

a.csv

7381838
7381840
7381842

PHP

   <?PHP
    require_once dirname(__FILE__) . '/SoftLayer/SoapClient.class.php';

    function readCSV($csvFile){
        $file_handle = fopen($csvFile, 'r');
        while (!feof($file_handle) ) {
            $line_of_text[] = fgetcsv($file_handle, 1024);
        }
        fclose($file_handle);
        return $line_of_text;
    }


    // Set path to CSV file
    $csvFile = 'a.csv';

    $csv = readCSV($csvFile);

    foreach ($csv as $value) {
        var_dump($value);
        print_r($value); 
        deleteInstance($value);

    }

    function deleteInstance($ccid){

        $apiUsername = 'xxxxx';
        $apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
        $cancelRightNow = true; //or false if you want to wait till the billing cycle ends

       $cloudComputingInstanceId = $ccid; 
        print_r($cloudComputingInstanceId);
        var_dump($cloudComputingInstanceId);

$client = SoftLayer_SoapClient::getClient('SoftLayer_Virtual_Guest',    $cloudComputingInstanceId, $apiUsername, $apiKey);
$objectMask = new SoftLayer_ObjectMask();
$objectMask->billingItem;
$client->setObjectMask($objectMask);
$cci = $client->getObject();
$client = SoftLayer_SoapClient::getClient('SoftLayer_Billing_Item', $cci->billingItem->id, $apiUsername, $apiKey);
$billingItem = $client->getObject();
if ($billingItem != null) {
    if ($cancelRightNow) {
        $client->cancelService();
    } else {
        $client->cancelServiceOnAnniversaryDate();
    }
}
    }


    ?>

Изображение 174551

  • 0
    Проблема, похоже, не в коде, который вы разместили. Помогло бы больше кода - особенно битов, которые используют функциональность, предоставляемую SoapClient.class.php.
  • 1
    Ошибка связана с функцией trim() . Он никогда не используется в коде, который вы нам показываете. Нам нужно увидеть код, в котором используется функция, чтобы помочь вам. Ошибка самоочевидна, хотя ...
Показать ещё 4 комментария
Теги:

2 ответа

2
Лучший ответ

Проблема в том, что ваш аргумент deleteInstance - это массив... Он выглядит так:

$csv = Array(
   0 => Array(0 => '7381838'),
   1 => Array (0 => '7381840'),
   2 => Array(0 => '7381842')
)

Это происходит потому, что вы разбираете его как CSV, который разбивает каждую строку на массив на основе разделителя. Это не то, что вы хотите. Вместо этого используйте file для чтения каждой строки в массив:

function readCSV($csvFile){
    return file($csvFile);

}

$csv = readCSV('a.csv');

foreach ($csv as $value) {
    // your value is now the line of the file like '7381838'
    deleteInstance($value);

}
1

Попробуйте это и посмотрите, что произойдет

foreach ($csv as $value) {
    $svalue = $value[0];
    var_dump($svalue);
    print_r($svalue); 
    deleteInstance($svalue);
}
  • 0
    Обратите внимание на ошибку преобразования массива в строку в этой строке. Я подозреваю, что по какой-то причине эта переменная все еще является массивом.
  • 0
    отредактировано, это должно работать, если оно действительно считает, что это массив

Ещё вопросы

Сообщество Overcoder
Наверх
Меню