Как присвоить значения одного массива переменным другого массива в PHP - PullRequest
0 голосов
/ 07 января 2020

РЕДАКТИРОВАТЬ: Вот рабочее решение после получения помощи от Рикардо.

$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) (за вычетом всех строка и текстовые материалы). Теперь я чувствую, что иду кругами.

1 Ответ

1 голос
/ 07 января 2020

Вы можете использовать ассоциативные переменные и массивы ha sh для значений pu sh:

$varName="msg";
$varName2="cat";

$List[$varName][] = "Value 1 of varName";
$List[$varName][] = "Value 2 of varName";
$List[$varName2][] = "Value 1 of varName2";
$List[$varName2][] = "Value 2 of varName2";

echo $List["msg"][0];  //Value 1 of varName
echo $List["cat"][1];  //Value 2 of varName2

Или использовать double $, чтобы присвоить значение переменной для создания новой переменной:

$varName="msg";
$$varName="Hello";

echo $msg; //Hello

Или перепутать:

$varName="msg";
$$varName[]="Hello";
$$varName[]="World";

echo $msg[0]." ".$msg[1]; //Hello World
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...