这可能是一个更优雅的解决方案,使用, ,str_getcsv
和array_walk
venerable (提取键/值对)。使用您的数据:use
parse_str
each
$string = 'paypal_merchant_email="sample@ymail.com"|paypal_verified_only="0"|payment_currency=""|sandbox="1"|sandbox_merchant_email="sample@ymail.com"|payment_logos=""|debug="0"|status_pending="W"|status_success="O"|status_canceled="D"|countries=""|min_amount="0"|max_amount="0"|secure_post=""|ipn_test=""|no_shipping="0"|address_override="0"|cost_per_transaction="0"|cost_percent_total="0"|tax_id=0|';
想法是首先使用 str_getcsv 来解析 -separated|
行,然后使用快速 PHP 函数遍历它。
$t = str_getcsv( $string, "|" );
此时,$t 是一个简单的数组,包含分解的“key=value”对。
$new = array();
array_walk( $t, function( &$a ) use (&$new) {
parse_str( $a, $b); # parses each line, returns key-value
$c = each( $b ); # need to obtain key-value from above
$new[$c["key"]] = $c["value"]; # simple assignment
});
这需要 PHP > 5.3.0,因为它在匿名函数中使用命名空间 (use)。但是,如果你做到了这一步,
print_r( $new );
给你这个:
Array (
[paypal_merchant_email] => "sample@ymail.com"
[paypal_verified_only] => "0"
[payment_currency] => ""
...