【问题标题】:PHP - Splitting an array, based on inputtype (key)PHP - 根据输入类型(键)拆分数组
【发布时间】:2019-03-26 16:59:16
【问题描述】:

我有一个表单,它以关联数组的形式发送大量混合数据(无线电输入、文本字段和复选框)。为了存储数据,我想根据输入类型将数据拆分为更小的数组。 var_dump 如下所示。

ATM i get this when i var_dump the array.

那么我如何创建包含 r** 键、文本框** 键和复选框** 键的新数组?

$arr = array( "r11"=> "2",
    "tekstbox11"=> "A",
    "udskift11"=> "on",
    "r12"=> "2",
    "tekstbox12"=> "B",
    "udskift12"=> "on",
    "r13"=> "2",
    "tekstbox13"=> "C",
    "udskift13"=> "on",
    "r14"=> "0",
    "tekstbox14"=> "",
    "r15"=> "1",
    "tekstbox15"=> "",
    "r16"=> "0",
    "tekstbox16"=> "",
    "r17"=> "1",
    "tekstbox17"=> "",
    "r18"=> "0",
    "tekstbox18"=> "",
    "r19"=> "1",
    "tekstbox19"=> "",
    "r110"=> "0",
    "tekstbox110"=> "",
    "r111"=> "1",
    "textbox111"=> "",
    "r112"=> "0",
    "textbox112"=> "",
    "r113"=> "1",
    "textbox113"=> "",
    "r114"=> "0",
    "textbox114"=> "",
    "r115"=> "1",
    "textbox115"=> "",
    "r116"=> "0",
    "textbox116"=> "",
    "r117"=> "1",
    "textbox117"=> "",
    "r118"=> "0",
    "textbox118"=> "",
    "r119"=> "1",
    "textbox119"=> "",
    "r120"=> "0",
    "textbox120"=> "",
    "r21"=> "2",
    "tekstbox21"=> "a",
    "r22"=> "2",
    "tekstbox22"=> "b",
    "r23"=> "2",
    "tekstbox23"=> "c",
    "r24"=> "0",
    "tekstbox24"=> "",
    "r25"=> "1",
    "textbox25"=> "",
    "r26"=> "0",
    "textbox26"=> "",
    "r27"=> "1",
    "textbox27"=> "",
    "r28"=> "0",
    "textbox28"=> "",
    "r31"=> "2",
    "tekstbox31"=> "1m",
    "udskift31"=> "on",
    "r32"=> "2",
    "tekstbox32"=> "2m",
    "udskift32"=> "on",
    "r33"=> "2",
    "tekstbox33"=> "3m",
    "udskift33"=> "on",
    "r34"=> "2",
    "tekstbox34"=> "4m",
    "udskift34"=> "on",
    "r35"=> "0",
    "tekstbox35"=> "",
    "r36"=> "0",
    "tekstbox36"=> "",
    "r37"=> "0",
    "tekstbox37"=> "",
    "r38"=> "0",
    "tekstbox38"=> "",
    "r39"=> "0",
    "tekstbox39"=> "",
    "r310"=> "0",
    "tekstbox310"=> "",
    "r311"=> "0",
    "tekstbox311"=> "",
    "r312"=> "0",
    "tekstbox312"=> "",
    "r313"=> "0",
    "tekstbox313"=> "",
    "r314"=> "1",
    "textbox314"=> "",
    "r315"=> "1",
    "textbox315"=> "",
    "r316"=> "1",
    "textbox316"=> "",
    "r317"=> "1",
    "textbox317"=> "",
    "r318"=> "1",
    "textbox318"=> "",
    "r319"=> "1",
    "textbox319"=> "",
    "r320"=> "1",
    "textbox320"=> "",
    "r321"=> "1",
    "textbox321"=> "",
    "r322"=> "1",
    "textbox322"=> "",
    "r323"=> "1",
    "textbox323"=> "",
    "r324"=> "1",
    "textbox324"=> "",
    "r325"=> "1",
    "textbox325"=> "",
    "r326"=> "2",
    "textbox326"=> "SLUT MED",
    "udskift326"=> "on"
);

【问题讨论】:

  • 请将您的数组作为代码而不是图像发布。 echo '<pre>' . print_r($arr, 1) . '</pre>' 会很好地格式化它。一旦你这样做,我可能会提供帮助。但是手动输入数组需要很长时间。
  • 请将您的数组作为代码而不是图像发布。
  • 很抱歉。现在呢?
  • 您只是想要关联数组中的键还是值?我已经准备好了答案,但只是想确保它是正确的。
  • @HarveyFletcher 最后我只需要这些值,以进一步处理并将它们存储在数据库中。 - Eriks 的回答满足了我的需要,所以我就照着做吧:)

标签: php arrays forms


【解决方案1】:

您可以迭代数组并将键拆分为字母和数字部分,然后将这些部分用作结果数组中的键。

foreach ($array as $key => $value) {
    preg_match('/(\D+)(\d+)/', $key, $parts);
    $result[$parts[1]][$parts[2]] = $value;
    //    alpha^    numeric^
}

结果会是这样的

$result = [
    'r' => ['11' => 2, '12'=> 2, ...],
    'tekstbox' => ['11' => 'A', '12'=> 'B', ...],
    'udskift' => ['11' => 'on' => '12' => 'on' ...]
];

但是你知道,如果你只是重命名你的表单输入,你也可以获得相同的结果:

 <input type="text" name="r[11]">

【讨论】:

  • 感谢您的 html 输入。我没有意识到这一点,它完全解决了我的问题:D
【解决方案2】:

您可以使用 array_filter() 之类的东西来检查密钥。

<?php 
$inputArray = [
    'text1' => 'text1',
    'text2' => 'text2',
    'checkbox1' => 'checkbox1',
    'checkbox2' => 'checkbox2',
    'radio1' => 'radio1',
    'radio2' => 'radio2'
];

$radioArray = array_filter($inputArray, function($key) {
    return false !== strpos($key, 'radio');
});
$textArray = array_filter($inputArray, function($key) {
    return false !== strpos($key, 'text');
});
$checkboxArray = array_filter($inputArray, function($key) {
    return false !== strpos($key, 'checkbox');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多