簡體   English   中英

php根據數組中的鍵名拆分數組

[英]Php array split based on array key name in

當我提交表單時,我得到如下數組格式的輸出:

Array ( [quantity_2] => 2 [extra_2] => 1 [quantity_1] => 1 [quantity_3] => 5 [extra_3] => 1 )

我想基於數組鍵的最后一個數字來拆分該數組,例如:

Array ( [quantity_2] => 2 [extra_2] => 1)
Array ( [quantity_1] => 1 [extra_2] => )
Array ( [quantity_3] => 5 [extra_3] => 1)

非常感謝您寶貴的重播。

我不認為有一種方法可以創建多個數組,而無需一個接一個地創建,因此可以得到的最接近的IMO是:

$arr = [
    'quantity_2' => 2,
    'extra_2' => 1,
    'quantity_1' => 1,
    'extra_1' => 10,
    'quantity_3' => 213,
    'extra_3' => 1
];

$newArray = [];
foreach ($arr as $key => $value) {
    $split = explode('_', $key);
    if (count($split) < 2) {
        continue;
    }

    $newArray[$split[1]][$split[0]] = $value;
}

print_r($newArray);

它的作用:-創建一個新的空數組-遍歷所有元素-用下划線分隔鍵,並將第二部分用作id-根據您想要/可能想要的格式填充新數組-擁有一個看起來像一個新的結構化數組所以:

Array
(
    [2] => Array
        (
            [quantity] => 2
            [extra] => 1
        )

    [1] => Array
        (
            [quantity] => 1
            [extra] => 10
        )

    [3] => Array
        (
            [quantity] => 213
            [extra] => 1
        )
)

我認為這個簡單的foreach會滿足您的需求。

$input = [
    'quantity_2' => 2,
    'extra_2' => 1,
    'quantity_1' => 1,
    'quantity_3' => 5,
    'extra_3' => 1
];

$output = [];

foreach ($input as $key => $value) {
    list ($name, $id) = explode('_', $key);
    $output[(int)$id][$key] = $value;
}

$output = array_values($output);

var_dump($output);

對此做出了一些假設,並且沒有添加任何錯誤檢查,但這足以使您入門。

鏈接到示例代碼

$arr = [
    'quantity_1' => 1,
    'extra_1' => 1,
    'quantity_2' => 2,
    'extra_2' => 2,
    'quantity_3' => 3,
    'extra_3' => 3
];

$formatted = [];
$pattern   = '/_(\d)+$/';
$matches   = null;
foreach ($arr as $key => $value) {
    preg_match($pattern, $key, $matches);
    $formatted[$matches[1]][$key] = $value;
}

print_r($formatted);

輸出:

Array
(
    [1] => Array
        (
            [quantity_1] => 1
            [extra_1] => 1
        )

    [2] => Array
        (
            [quantity_2] => 2
            [extra_2] => 2
        )

    [3] => Array
        (
            [quantity_3] => 3
            [extra_3] => 3
        )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM