2011-05-31 33 views
0

使用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)末尾看到的数字是'数据'的实际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的数据一起在一个新的数组。

任何人都知道如何解决这个问题?

回答

3

尝试:

<?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 
     ) 

) 
+0

哇,谢谢!除了一个问题之外,这很有效。同样在你的输出中可以看到,具有2个diggets(> 10)的数字(例如输出中的11个)没有得到正确的处理。 questionid只包含数字的前半部分,只有一半是从滑块,切换,文本(“slider1”,“toggle1”,“text1”)中提取的。 – YDL 2011-05-31 11:22:26

+0

@YDL我的不好,抱歉。忘了控制正则表达式的贪婪。 (查看更新示例) – Yoshi 2011-05-31 11:24:21

+0

现在完美地工作!感谢您的快速回答和帮助//现在,剩下要做的就是从另一个数组中将值推送到这个数组中,但这不应该成为问题。再次感谢。 – YDL 2011-05-31 11:27:54

相关问题