PHP изменить массив строк в массив массивов - PullRequest
0 голосов
/ 30 апреля 2020

Я строю свой собственный массив из массива, предоставленного API, чтобы сделать его немного чище и отформатировать массив так, как мне нужно.

$products - это массив из API и $licenseVariants - целевой массив.

foreach ($products as $product) {

    $licenseVariants = array();
    $variantOptions = array();

    foreach ($product['variants'] as $variant) {

        // Key = first word from the string
        // Value = drop the first word from the string

        list($licenseKey, $licenseValue) = explode(' ', $variant['title'], 2);
        $variantOptions[strtolower($licenseKey)][] = $licenseValue;

    }

    $licenseVariants[] = array(
        'name' => $product['options'][0]['name'], // 'License'
        'heading' => 'Please select the type of license(s) you require',
        'variants' => $variantOptions
    );

}

Это выводит:

array(1) {
  [0]=>
  array(3) {
    ["name"]=>
    string(7) "License"
    ["heading"]=>
    string(48) "Please select the type of license(s) you require"
    ["variants"]=>
    array(3) {
      ["desktop"]=>
      array(16) {
        [0]=>
        string(11) "1–3 users"
        [1]=>
        string(11) "4–6 users"
        [2]=>
        string(12) "7–10 users"
        [3]=>
        string(13) "11–15 users"
        [4]=>
        string(13) "16–25 users"
        [5]=>
        string(13) "25–50 users"
      }
      ["web"]=>
      array(12) {
        [0]=>
        string(20) "10k page views/month"
        [1]=>
        string(20) "25k page views/month"
        [2]=>
        string(20) "50k page views/month"
        [3]=>
        string(21) "100k page views/month"
        [4]=>
        string(21) "250k page views/month"
        [5]=>
        string(21) "500k page views/month"
      }
      ["app"]=>
      array(13) {
        [0]=>
        string(12) "5k downloads"
        [1]=>
        string(18) "5k–10k downloads"
        [2]=>
        string(19) "10k–25k downloads"
        [3]=>
        string(19) "25k–50k downloads"
        [4]=>
        string(19) "50–100k downloads"
        [5]=>
        string(21) "100k–250k downloads"
      }
    }
  }
}

Однако, и мой вопрос, мне нужно добавить другой массив данных под каждый вариант опция вместо массива строк, добавляя $variant['id'] вместе с $licenseValue.

Быстрый пример ...

array() {
    ["desktop"]=>
        array() {
            [0]=>
                array()=>
                    ["id"]=>string() "1234512345"
                    ["title"]=>string() "1–3 users"
            [1]=>
                array()=>
                    ["id"]=>string() "434324234234234"
                    ["title"]=>string() "4–6 users"

1 Ответ

2 голосов
/ 30 апреля 2020

попробуйте вот так (надеюсь, это поможет):

foreach ($products as $product) {
    $licenseVariants = array();
    $variantOptions = array();

    foreach ($product['variants'] as $variant) {

        // Key = first word from the string
        // Value = drop the first word from the string

        list($licenseKey, $licenseValue) = explode(' ', $variant['title'], 2);
        $variantOptions[strtolower($licenseKey)][] = [
            'id' => $variant['id'], 
            'title' => $licenseValue
        ];
    }

    $licenseVariants[] = array(
        'name' => $product['options'][0]['name'], // 'License'
        'heading' => 'Please select the type of license(s) you require',
        'variants' => $variantOptions
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...