2017-03-17 147 views
0

我知道可能有這方面的消息來源,但我試過了一切,但我仍然沒有得到正確的解決方案。那就是爲什麼我要求你在這裏幫忙。

我有一個$ _POST數組,我想把值放在一個數組中。這裏是最後出來我想:

$response = [ 
      ['category' => 2, 'value' => "june"], 
      ['category' => 5, 'value' => "may"], 
      ['category' => 8, 'value' => "april"] 
      ] 

這裏是抓時,$ _ POST包含一個整數的值與之間,然後一個字符串如「6月2日」,「5可能」等

空間

當我得到這個值,我使用爆炸拆分它,然後我嘗試將各個值添加到響應數組中。這只是增加了一個結果。

我試了一下:

$response = []; 

foreach ($_POST as $key => $value) { 

    $split = explode(" ", $value); 
    $result = ['category' => $split[0], 'value' => $split[1]]; 

    $response[] = $result; 

} 

出於某種原因,結果並不如上面建議。任何想法和建議將不勝感激。

+2

你能在這裏發佈如何'回聲 '

'.print_r($_POST, true).'
';'看起來像 – codtex

+1

此外,什麼是你的結果得到些什麼? – jeroen

+0

我只得到結果... @sand – Tajinere

回答

0

你的問題沒有處理數據到正確的結果數組的問題。負有$ _POST的責任不能保持預期的數據。 此問題的所有答案都無法修復您的$ _POST數據,因爲您的問題沒有提供html表單。可以提供的唯一潛在價值是改進您的陣列構建過程。

這裏有兩種方法,通過減少聲明的變量的數量來提高你的過程:

演示使用$a=array('2 june','5 may','8 april');代表你的$ _POST陣列。

  1. 一襯墊在foreach循環:

    foreach($a as $v){ 
        $r[]=array_combine(["category","value"],explode(" ",$v)); 
    } 
    
  2. 一襯墊與無環:

    $r=array_map(function($v){return array_combine(["category","value"],explode(" ",$v));},$a); 
    

使用任一種處理所得到的$r將是:

array (
    0 => 
    array (
    'category' => '2', 
    'value' => 'june', 
), 
    1 => 
    array (
    'category' => '5', 
    'value' => 'may', 
), 
    2 => 
    array (
    'category' => '8', 
    'value' => 'april', 
), 
) 

參考使用的功能: explode()array_combine()array_map()

+0

爲什麼你設置$ key變量,如果你不使用它? –

+0

爲什麼這個OP的代碼不工作?它基本相同,但寫法不同。 – jeroen

+0

對不起,我不得不趕緊吃晚飯,沒有仔細檢查發佈之前,我刪除了'$ key'變量。我的答案顯示,當輸入數組如預期時沒有任何錯誤。維克多是正確的,缺陷是在輸入數組中。 – mickmackusa

1

基本上,問題是出在$ _POST。這是具有提交的鍵值數據的全局數組。您不應該使用

foreach ($_POST as $key => $value) { 

解析您的數據時沒有任何檢查。這些數據是由用戶提交的,並不總是他們有你等待的格式。例如,如果你的HTML表單中有一個變量「日期」,你應該準備好$_POST['dates']將是你所有的'6月5日','7月7日'等等的數組。不要忘記檢查並驗證您收到的所有用戶數據。安全原因也很重要。

你的代碼(foreach body,無條件)是好的,我已經檢查過了。嘗試在explode()之前設置print_r(),您將看到您正在使用數組,而不是使用字符串。

+0

感謝您的建議,此代碼只是一個快速檢查,安全措施已到位..原因是表單有很多輸入字段,我不想一個接一個地檢查所有的。所以我使用formdata將數據發佈到所說的php腳本 –

-1

試試這個:

$response = []; 
    // just for example use this one 
    $data = "2 june, 5 may, 7 july"; 
    $temp = explode(",", $data); 

    // and you can use this one for your case 
    /*$data = $_POST['var_name']; // var_name is your variable name from $_POST 
    $temp = explode(",", $data);*/ 

    foreach ($temp as $key => $value) { 
     $split = explode(" ", trim($value)); 

     foreach ($split as $val) { 
      $result = ['category' => $split[0], 'value' => $split[1]]; 
     } 
     $respon[] = $result; 
    } 

    echo "<pre>"; 
    echo print_r($respon); 
    echo "</pre"; 

輸出:

Array 
(
    [0] => Array 
     (
      [category] => 2 
      [value] => june 
     ) 

    [1] => Array 
     (
      [category] => 5 
      [value] => may 
     ) 

    [2] => Array 
     (
      [category] => 7 
      [value] => july 
     ) 

) 
+0

這個答案假定傳入的$ _POST數據是一個csv字符串,但是基於OP的處理方法,沒有理由相信這是真的。 – mickmackusa

-1
$response = array(); 

    foreach ($_POST as $key => $value) { 

    $split = ''; 
    $split = explode(" ", $value); 
    $result = array('category' => $split[0], 'value' => $split[1]); 

    $response[] = $result; 

    } 
+0

請解釋您的答案代碼。 – Blackbam

+0

從發佈數據中設置數組中的鍵/值對。謝謝。 – user1544541

+0

該答案使用比OP更多的代碼來實現相同的結果。 – mickmackusa