Я очень новичок в PHP, поэтому я мог бы, возможно, пропустить что-то простое здесь.
Краткий обзор того, что делает мой сценарий:
- Interprest файл CSV и хранит каждая строка в массиве (
$line
). - Циклы через массив
$line
и сохраняют результаты указанного ключа как строку ($csv_product_list
), если массив не пуст. - Извлекает список продуктов SKU из базы Magento и сохраняет их в виде массива (
$sku
).
Я затем пытается через петлю $sku
массива в то время как проверка, если значение $sku
существует в пределах строки $csv_product_list
. Проблема в том, что я получаю те же результаты, даже если значение делает в строке $csv_product_list
. Для этой проверки я использую:
if (strpos($csv_product_list, $sku[$s] !== false)) {
echo '<b>', $sku[$s], '</b> does exist within <b>$csv_product_list</b><br>';
} else {
echo '<b>', $sku[$s], '</b> does not exist within <b>$csv_product_list</b><br>';
}
В приведенном ниже скриншоте, я вывода значения $csv_product_list
и ниже этой линии являются результатом петли для двух значений $sku
.
Как вы можете видеть, CB853 в результате, что она не существует в $csv_product_list
несмотря на результат выше, показывая, что он делает.
Обратите внимание, что CB967 не существует в пределах $csv_product_list
, поэтому результаты должны отличаться друг от друга, если этот скрипт работает правильно.
Пожалуйста, кто-нибудь может рассказать о том, что здесь не так? Мой полный код приведен ниже для любых необходимых разъяснений. Большое вам спасибо за ваше время.
<?php
/** GLOBAL VARIABLES (START) */
$client = new SoapClient('***'); // Magento API URL.
$session_id = $client->login('***', '***'); // Standard API 'User Name' and 'API Key'.
/** GLOBAL VARIABLES (END) **/
/** CSV (START) */
$csv = array(); // ?
$line = array(); // ?
// ?
if (FALSE !== $handle = fopen("test.csv", "r")) {
while (FALSE !== $row = fgetcsv($handle)) {
$csv[] = $row;
}
}
// ?
foreach (array_slice($csv, 1) as $row) {
$new_row = array();
for ($i = 0, $c = count($csv[0]); $i < $c; ++$i) {
$new_row[$csv[0][$i]] = $row[$i];
}
$line[] = $new_row;
}
/** CSV (END) */
/** CSV SKU CONVERSION (START) */
$csv_product_list = ''; // Create $csv_product_list variable before results of the loop are added.
// Loop through each CSV row and assign the results to $csv_product_list.
foreach ($line as $iLineNumber => $data_line) {
$data_line_without_change = $data_line;
if (!empty($data_line['Product SKU'])) {
$csv_product_list .= $data_line['Product SKU'] . ' ';
}
}
/** CSV SKU CONVERSION (END) */
/** ZOEY PRODUCTS (START) */
// Filter for where the 'FMA Stock' attribute is set to 'Yes'.
$fma_stock_filter = array('complex_filter'=>
array(
array('key'=>'fma_stock', 'value'=>array('key' =>'eq', 'value' => 'Yes')),
),
);
// Retrieve list of products using the filter and assign the result to $zoey_product_list.
$zoey_product_list = $client->catalogProductList($session_id, $fma_stock_filter);
// Convert the result from $zoey_product_list into an array of SKU's as $sku.
$sku = [];
foreach ($zoey_product_list as $item) {
$sku[] = $item->sku;
}
/** ZOEY PRODUCTS (END) */
echo 'The current contents of <b>$csv_product_list</b> are ', $csv_product_list, '<br><br>';
/*** DISABLE PRODUCTS (START) */
for ($s = 0; $s < count($sku); $s++) {
if (strpos($csv_product_list, $sku[$s] !== false)) {
echo '<b>', $sku[$s], '</b> does exist within <b>$csv_product_list</b><br>';
} else {
echo '<b>', $sku[$s], '</b> does not exist within <b>$csv_product_list</b><br>';
}
}
/*** DISABLE PRODUCTS (END) */
?>
я должен получить мои глаза испытания и мои очки заменили – RiggsFolly
Тьфу, какая нелепая ошибка. Я изначально пропустил ')' с конца 'false', поэтому подумал, что мне пришлось поместить двух из них, чтобы исправить ошибку. Спасибо. –
@RiggsFolly Название вопроса помогло :-) – jeroen