2016-12-13 4 views
1

Я очень новичок в 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.

enter image description here

Как вы можете видеть, 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) */ 
?> 

ответ

2

Вы не правильно использовать его:

if (strpos($csv_product_list, $sku[$s] !== false)) { 
               ^this is wrong 

Результат $sku[$s] !== false является булевой, true или false, так что вы проверяете, существует ли логическое в $csv_product_list.

Понадобится:

if (strpos($csv_product_list, $sku[$s]) !== false) { 
            ^here 
+2

я должен получить мои глаза испытания и мои очки заменили – RiggsFolly

+1

Тьфу, какая нелепая ошибка. Я изначально пропустил ')' с конца 'false', поэтому подумал, что мне пришлось поместить двух из них, чтобы исправить ошибку. Спасибо. –

+1

@RiggsFolly Название вопроса помогло :-) – jeroen