Я пытаюсь прочитать файл 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();
}
}
}
?>
Проблема в том, что ваш аргумент 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);
}
Попробуйте это и посмотрите, что произойдет
foreach ($csv as $value) {
$svalue = $value[0];
var_dump($svalue);
print_r($svalue);
deleteInstance($svalue);
}
trim()
. Он никогда не используется в коде, который вы нам показываете. Нам нужно увидеть код, в котором используется функция, чтобы помочь вам. Ошибка самоочевидна, хотя ...