PHP - Как получить список элементов, разделенных \ n внутри массива, который требует запятой PHP для разделения значений - PullRequest
0 голосов
/ 16 июня 2020

Итак, у меня есть код, который захватывает каждую строку отдельно в текстовом поле. Например:

1 2 3

будет 1,2,3. Три разных значения.

Затем мне нужно поместить эти значения в массив Shoppys, но с запятой, разделяющей значения. Я так долго зацикливался на нем. массив для всех значений.

Мой код:

            $acs = htmlspecialchars($_POST['acs']);

            // Do our magic foreach loop for each new line
            $array = explode("\n", $acs);
            $accounta = '';

            foreach($array as $line){
                if (empty($line)) { 
                    echo 'A line in the accounts field is empty. Please 
                    remove it and try again.'; 
                } else {                        
                    // Here we want to acc the account as an array inside the create-product Shoppy function
                    $accounta .= "$line\n";

                }
            }

            // Shoppy add product here
            $product = \Shoppy\Models\Product::create([
                "title"         => "$title",
                "price"         => $price,
                "unlisted"      => false,
                "type"          => "$servtype",
                "currency"      => "$currencyp",
                "confirmations" => 1,
                "stock_warning" => $stockwarning,
                "quantity"      => [
                    "min" => $minq,
                    "max" => $maxq
                ],
                "email"         => [
                    "enabled" => $emailr
                ],
                "accounts" => [
                    /*
                        'testa', 'rami', 'totas'
                        '1','2','3',
                    */
                    $accounta
                ]

            ]);

Как видите, мне нужен формат: 'testa', 'rami', 'totas'

$ accounta не будет читать запятую, даже если я создам его внутри foreach выше в верхней части моего кода, поскольку он читает его как строку.

Это новый код, который мне сказали использовать implode с:

enter image description here

хорошо, теперь он добавляет продукт, но не разделяет его правильно, поскольку добавляет все внутри 1 учетной записи:

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Наконец-то разобрался, как это сделать. Мне пришлось сделать это по-другому, поскольку я не мог создать foreach l oop, поскольку он уже находится внутри массива и не хотел бы l oop весь массив ... только элементы, вставляемые в массив учетных записей.

Мой последний рабочий код:

            $acs = htmlspecialchars($_POST['acs']);

            // Do our magic foreach loop for each new line
            $accountArray = explode("\n", $acs);
            $accountant = array();

            foreach($accountArray as $line) {
                if (empty($line)) { echo 'A line in the accounts field is empty. Please remove it and try again.'; } else {

                    // Here we want to acc the account as an array inside the create-product Shoppy function
                    //$accounts[] = "$line";
                    array_push($accountant, "$line");

                }
            }

            // Shoppy add product here
            $product = \Shoppy\Models\Product::create([
                "title"         => "$title",
                "price"         => $price,
                "unlisted"      => false,
                "type"          => "$servtype",
                "currency"      => "$currencyp",
                "confirmations" => 1,
                "stock_warning" => $stockwarning,
                "quantity"      => [
                    "min" => $minq,
                    "max" => $maxq
                ],
                "email"         => [
                    "enabled" => $emailr
                ],
                "accounts" => $accountant
            ]);
0 голосов
/ 16 июня 2020

Если у вас есть

$array = explode("\n", $acs);

и у вас есть значения:

Array (
    [0] => testa
    [1] => rami
    [2] => totas
)

, вы можете просто ввести

$comma_separated_values = implode(',', $array);

и $comma_separated_values будет строка, которая выглядит так:

'testa', 'rami', 'totas'

В вашем случае вы должны просто ввести это:

// Shoppy add product here
$product = \Shoppy\Models\Product::create([
        "title"         => "$title",
        "price"         => $price,
        "unlisted"      => false,
        "type"          => "$servtype",
        "currency"      => "$currencyp",
        "confirmations" => 1,
        "stock_warning" => $stockwarning,
        "quantity"      => [
        "min" => $minq,
        "max" => $maxq
    ],
    "email" => [
        "enabled" => $emailr
    ],
    "accounts" => [$comma_separated_values]
    ]);

Внимательно посмотрите на свой код:

$accounts = $array

and 

//This would contain an array with the same values as $array
$accounts = [$comma_separated_values]` 

Если вы просто выполните:

`$accounts = $comma_separated_values` 

, это, вероятно, будет ошибкой, потому что кажется, что хочет массив, а это всего лишь строка : - )


Я не знаю, но я предполагаю, что это должно сработать на основе вышеизложенного!

// Shoppy add product here
$product = \Shoppy\Models\Product::create([
        "title"         => "$title",
        "price"         => $price,
        "unlisted"      => false,
        "type"          => "$servtype",
        "currency"      => "$currencyp",
        "confirmations" => 1,
        "stock_warning" => $stockwarning,
        "quantity"      => [
        "min" => $minq,
        "max" => $maxq
    ],
    "email" => [
        "enabled" => $emailr
    ],
    "accounts" => $array
    ]);

В сноске: Пожалуйста, введите более информативное имя для $array (например, $account_array)

...