РЕДАКТИРОВАТЬ: Вот рабочее решение после получения помощи от Рикардо.
$headers_as_variables = str_replace(TEXT_DELIMITER, ",", $headers);
$headers_as_variables = explode(',', $headers_as_variables); //split string into array seperated by ', '
$i = 0;
foreach($headers_as_variables as $column_header) {
$varName = $headers_as_variables[$i];
$$varName = $data[$i];
$i = $i + 1;
}
Я пытаюсь разработать программу, которая импортирует потоки данных от различных поставщиков ... с использованием XAMPP на Windows 10 (1909 ).
По сути, я пытаюсь превратить первую строку потока данных в имена переменных, а затем присваивать значения каждой переменной из строк / записей, следующих за строкой заголовка.
My существующий код для одного поставщика работает, но заголовки таблиц варьируются от поставщика к поставщику ... таким образом, моя попытка автоматизировать.
Вот мой рабочий код ... основанный на одном поставщике. Имена переменных в «list ()» совпадают со строкой заголовка в потоке данных. IE $ mfg = $ data [0] (mfg ... первое поле в моем фиде данных)
list($mfg,$sku,$model,$name,$desc,$img,$weight,$cost,$map,$msrp,$shipping,$zip,$qty,$tags,$length,$height,$width,$pqty,$cat,$catpath,$added,$freq,$lead,$eta,$updated,$url) = $data;
//$mfg = $data[0];$sku = $data[1];$model = $data[2];$name = $data[3];$desc = $data[4];$img = $data[5];$weight = $data[6];$cost = $data[7];$map = $data[8];$msrp = $data[9];$shipping = $data[10];$zip = $data[11];$qty = $data[12];$tags = $data[13];$length = $data[14];$height = $data[15];$width = $data[16];$pqty = $data[17];$cat = $data[18];$catpath = $data[19];$added = $data[20];$freq = $data[21];$lead = $data[22];$eta = $data[23];$updated = $data[24];$url = $data[25];
Если pu sh подходит к пушу, я могу сделать таблицу с заголовками строк для каждого поставщика , а затем захватите данные в соответствии с чьим потоком данных, который я загружаю. Но я думаю, что может быть более простое решение с использованием PHP ... Я просто не вижу его. Кроме того, что произойдет, если поставщик удалит или добавит столбец ... мой код будет поврежден.
Вот что я пробовал:
echo $headers_as_variables;
$mfg, $sku, $model, $name, $desc, $img, $weight, $cost, $map, $msrp, $shipping, $zip, $qty, $tags, $length, $height, $width, $pqty, $cat, $catpath, $added, $freq, $lead, $eta, $updated, $url
Я пытался использовать это как массив с моей функцией list ();
$variable_array = array($mfg,$sku,$model,$name,$desc,$img,$weight,$cost,$map,$msrp,$shipping,$zip,$qty,$tags,$length,$height,$width,$pqty,$cat,$catpath,$added,$freq,$lead,$eta,$updated,$url)
list($variable_array) = $data;
Это привело к БЕЛОМУ ЭКРАНУ СМЕРТИ. ЛОЛ.
Затем я преобразовал строку в массив и установил оба массива равными друг другу.
$headers_as_variables = explode(',', $headers_as_variables);
$var_dump($headers_as_variables);
array(26) { [0]=> string(4) "$mfg" [1]=> string(5) " $sku" [2]=> string(7) " $model" [3]=> string(6) " $name" [4]=> string(6) " $desc" [5]=> string(5) " $img" [6]=> string(8) " $weight" [7]=> string(6) " $cost" [8]=> string(5) " $map" [9]=> string(6) " $msrp" [10]=> string(10) " $shipping" [11]=> string(5) " $zip" [12]=> string(5) " $qty" [13]=> string(6) " $tags" [14]=> string(8) " $length" [15]=> string(8) " $height" [16]=> string(7) " $width" [17]=> string(6) " $pqty" [18]=> string(5) " $cat" [19]=> string(9) " $catpath" [20]=> string(7) " $added" [21]=> string(6) " $freq" [22]=> string(6) " $lead" [23]=> string(5) " $eta" [24]=> string(9) " $updated" [25]=> string(6) " $url " }
var_dump($data);
array(26) { [0]=> string(3) "mfg" [1]=> string(3) "sku" [2]=> string(5) "model" [3]=> string(4) "name" [4]=> string(4) "desc" [5]=> string(3) "img" [6]=> string(6) "weight" [7]=> string(4) "cost" [8]=> string(3) "map" [9]=> string(4) "msrp" [10]=> string(8) "shipping" [11]=> string(3) "zip" [12]=> string(3) "qty" [13]=> string(4) "tags" [14]=> string(6) "length" [15]=> string(6) "height" [16]=> string(5) "width" [17]=> string(4) "pqty" [18]=> string(3) "cat" [19]=> string(7) "catpath" [20]=> string(5) "added" [21]=> string(4) "freq" [22]=> string(4) "lead" [23]=> string(3) "eta" [24]=> string(7) "updated" [25]=> string(3) "url" }
Они оба выглядят так, как должны, за исключением двойных кавычек вокруг имен переменных внутри массив. Я удалил их с помощью замены строки и все еще не могу получить значения моего поля из другого массива ($ data) для присоединения к ним.
Итак, я подумал, что простое сопоставление двух массивов по числовым идентификаторам будет работать ... .но это не так.
$i = 0;
foreach($headers_as_variables as $column_header) {
//$headers_as_variables[$i] = str_replace("\"", "", $headers_as_variables[$i]); //Removed double-quotes
$headers_as_variables[$i] = $data[$i]; // $mfg = mfg ... one would think?
echo $headers_as_variables[$i] . '='. $data[$i] . '<br>'; // Output: $mfg = mfg
echo 'MFG - ' . $mfg . '<br><br>'; // Result: MFG -
$i++;
}
Так что я думал, что переменные переменные сделают свое дело.
$i = 0;
foreach($headers_as_variables as $column_header) {
$a = $headers_as_variables[$i];
$$a = $data[$i];
echo "$a ${$a}" . "<br>"; // Output: $mfg mfg
echo 'MFG - ' . $mfg . '<br><br>'; // Output: MFG -
$i = $i + 1;
}
Еще одна попытка ... объединить массивы и использовать ключ / значения для получить то, что мне нужно. К сожалению, я довольно новичок, когда дело доходит до этого ... даже после чтения в течение нескольких дней.
$a = array($headers_as_variables);
$b = array($data);
$c = array_combine($a, $b);
print_r($c);
//Array ( [Array] => Array ( [0] => mfg [1] => sku [2] => model [3] => name [4] => desc [5] => img [6] => weight [7] => cost [8] => map [9] => msrp [10] => shipping [11] => zip [12] => qty [13] => tags [14] => length [15] => height [16] => width [17] => pqty [18] => cat [19] => catpath [20] => added [21] => freq [22] => lead [23] => eta [24] => updated [25] => url ) )
Этот массив очень похож на var_dump ($ data) (за вычетом всех строка и текстовые материалы). Теперь я чувствую, что иду кругами.