使用sencha touch(对于问题而言并不重要),将数据阵列发送到我的PHP脚本。
["slider3"] => 1
["toggle3"] => 0
["text3"] => "text"
["slider8"] => 5
["toggle8"] => 0
["text8"] => "text"
["slider11"] => 4
["toggle11"] => 0
["text11"] => "text"
["slider4"] => 1
["toggle4"] => 0
["text4"] => "text"
您可以看到数组有点“奇怪”,因为没有逻辑标识符(1-> 2-> 3)。取而代之的是输入字段的名称(来自sencha),其中添加到此字符串中。
您在密钥末端看到的数字(3、8、11、4)是“ data”的实际ID。
这就是我卡住的地方。为了进一步处理数据,我想将收到的数组更改为这样的另一个数组:
[0]
["questionid"] => 3 (<- Number on the end of the original key)
["toggle"] => value from toggle3
["slider"] => value from slider3
["text"] => value form text3
[1]
["questionid"] => 8 (<- Number on the end of the original key)
["toggle"] => value from toggle8
["slider"] => value from slider8
["text"] => value from text8
etc.
或换句话说,我想在新数组中将数据与密钥末端的同一ID分组。
任何人都知道如何解决这个问题?
try:
<?php
$data = array(
"slider3" => 1,
"toggle3" => 0,
"text3" => "text",
"slider8" => 5,
"toggle8" => 0,
"text8" => "text",
"slider11" => 4,
"toggle11" => 0,
"text11" => "text",
"slider4" => 1,
"toggle4" => 0,
"text4" => "text",
);
$newData = array();
foreach ($data as $entryKey => $entry) {
if (preg_match('/^(.+?)(\d+)$/', $entryKey, $matches)) {
list(, $key, $id) = $matches;
if (!isset($newData[$id])) {
$newData[$id] = array(
'questionid' => $id
);
}
$newData[$id][$key] = $entry;
}
}
$newData = array_values($newData);
print_r($newData);
:
Array
(
[0] => Array
(
[questionid] => 3
[slider] => 1
[toggle] => 0
[text] => text
)
[1] => Array
(
[questionid] => 8
[slider] => 5
[toggle] => 0
[text] => text
)
[2] => Array
(
[questionid] => 11
[slider] => 4
[toggle] => 0
[text] => text
)
[3] => Array
(
[questionid] => 4
[slider] => 1
[toggle] => 0
[text] => text
)
)
为了避免在结果数组中分配临时分组键,请将参考将每个遇到的组的参考推入结果数组中,然后将孩子推入其中。这样,不需要迭代结果。 demo
array_values()