2016-02-01 37 views
3

我有這樣的字符串格式的串這是$ _POST變量中的數組:使用的sprintf

array (size=5) 
    'form' => string 'form-elements' (length=13) 
    'company' => string 'asdasd' (length=6) 
    'cod_postal' => string '051768' (length=6) 
    'recaptcha_challenge_field' => string '03AHJ_VuvJZjfMzRQolI_QhGijJqAEcRPswuz9l68I6VStJzTbuK4ilos06TIQKVsIy2vpe1PEq-Q5KBVlZ5xt4HM5VoJSWUgFTGVbtbmARtKiMvO4WZh57X0-QVDyQ5Lq-ZM8rMqB5O2-rCbnyw_UAGbbV1ZElsI4kuLk4ei6mzLtqgcU2VAR64tySiKPARDtahiTBKWePH2rjKO6KUBQTRE49TMjIGb5hg8sbYguKBSUrRF6G86b89M' (length=249) 
    'recaptcha_response_field' => string '168' (length=3) 

首先,我想換整串[]替換 「」:

[[\"form\",\"form-elements\"], [\"company\",\"asdasd\"], [\"cod_postal\",\"051768\"], [\"recaptcha_challenge_field\",\"03AHJ_VuvJZjfMzRQolI_QhGijJqAEcRPswuz9l68I6VStJzTbuK4ilos06TIQKVsIy2vpe1PEq-Q5KBVlZ5xt4HM5VoJSWUgFTGVbtbmARtKiMvO4WZh57X0-QVDyQ5Lq-ZM8rMqB5O2-rCbnyw_UAGbbV1ZElsI4kuLk4ei6mzLtqgcU2VAR64tySiKPARDtahiTBKWePH2rjKO6KUBQTRE49TMjIGb5hg8sbYguKBSUrRF6G86b89M\"], [\"recaptcha_response_field\",\"168\"]] 

,並排除[\"form\",\"form-elements\"][\"recaptcha_challenge_field\",\"03AHJ_VuvJZjfMzRQolI_QhGijJqAEcRPswuz9l68I6VStJzTbuK4ilos06TIQKVsIy2vpe1PEq-Q5KBVlZ5xt4HM5VoJSWUgFTGVbtbmARtKiMvO4WZh57X0-QVDyQ5Lq-ZM8rMqB5O2-rCbnyw_UAGbbV1ZElsI4kuLk4ei6mzLtqgcU2VAR64tySiKPARDtahiTBKWePH2rjKO6KUBQTRE49TMjIGb5hg8sbYguKBSUrRF6G86b89M\"][\"recaptcha_response_field\",\"168\"]

我可以用它來做到這一點,怎麼樣?

+0

可以指定你的目標是什麼?例如:我想*您試圖實現的是丟棄鍵'form','recaptcha_challenge_field'和'recaptcha_response_field'的鍵值條目,以使它們不出現在$中的鍵值映射中_POST變量。我這個假設是否正確? – klaar

回答

0

您必須過濾輸入。過濾之後你可以返回JSON編碼字符串:

function arrayDisplay($input) 
{ 
    $input = array_filter($input, function ($key) { 
     return !in_array($key, array('form', 'recaptcha_challenge_field', 'recaptcha_response_field')); 
    }, ARRAY_FILTER_USE_KEY); 

    return json_encode(array($input)); 
} 

如果仍想返回用逗號分隔的鍵值對則保持原有的破滅功能和連接具有方括號的結果:

function arrayDisplay($input) 
{ 
    $input = array_filter($input, function ($key) { 
     return !in_array($key, array('form', 'recaptcha_challenge_field', 'recaptcha_response_field')); 
    }, ARRAY_FILTER_USE_KEY); 

    return '[' . implode(
     ', ', 
     array_map(
      function ($v, $k) { 
       return sprintf('["%s","%s"]', $k, $v); 
      }, 
      $input, 
      array_keys($input) 
     ) 
    ) . ']'; 
} 

請注意$xml_encode = json_encode($xml_array);是沒有意義的,因爲返回的字符串「幾乎」是一個有效的json編碼的字符串(在原始函數中)。如果這是您的意圖,那麼您必須使用我編寫的第一個函數,並刪除那些再次編碼返回值的代碼行。

0

您應該從$ _ POST陣列開始,並採取從它的鑰匙,你真正需要的:

$input = $_POST; 
unset($input["form"]); 
unset($input["recaptcha_challenge_field"]); 
unset($input["recaptcha_response_field"]); 

現在$輸入陣列看起來像這樣:

array(
    "company" => "asdasd", 
    "cod_postal" => "051768" 
); 

然後,我會改變你的arrayDisplay函數的定義,而不改變它的功能,將它分解成2:

function arrayPairs($input) { 
    return array_map(
     function ($v, $k) { 
      return [$k,$v]; 
     }, 
     $input, 
     array_keys($input) 
    ); 
} 

function arrayDisplay($input) { 
    return implode (", ", array_map('json_encode', arrayPairs($input))); 
} 

arrayDisplay功能仍像以前一樣返回相同的價值觀,但你現在也可以撥打arrayPairs無需轉換爲字符串。相反,你會做json_encode賦予正是你想要的輸出轉換:

echo json_encode(arrayPairs($input)); 

此輸出:

[ 「公司」, 「asdasd」],[ 「cod_postal」 「051768」]]

注意:如果你不使用arrayDisplay功能用於任何其它目的,那麼你可以做掉它。此解決方案僅使用功能arrayPairs

0

我做了一些改變,並結束了與此:

function arrayDisplay($input) 
{ 
    $goodKeys = array_diff(array_keys($input), array('form', 'recaptcha_challenge_field', 'recaptcha_response_field')); 
var_dump($goodKeys); 

    $data = []; 
    foreach ($goodKeys as $goodKey) { 
     $data[$goodKey] = $input[$goodKey]; 
    } 
    return '[' . implode(
     ', ', 
     array_map(
      function ($v, $k) { 
       return sprintf('["%s","%s"]', $k, $v); 
      }, 
      $data, 
      array_keys($data) 
     ) 
    ) . ']'; 
} 

但現在有更多的一個問題,我需要從字符串的開始/結束擺脫「」這個2: 從這樣的:

"[[\"company\",\"123\"], [\"cod_postal\",\"051768\"]]" 

這樣:

[[\"company\",\"123\"], [\"cod_postal\",\"051768\"]]