2011-05-31 32 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

相關問題