Jeśli mogę zaufać strukturalny charakter macierzy wejściowej, mogę zapewnić gładki jedno-liner (bez o/while) dla Ciebie ...
$input=array(
12 => "USD",
13 => "10150.00",
14 => "9850.00",
15 => "SGD",
16 => "8015.40",
17 => "7915.40",
18 => "HKD",
19 => "1304.60",
20 => "1288.60"
);
array_map(function($a)use(&$output){$output[$a[0]]=["Buy"=>$a[1],"Sell"=>$a[2]];},array_chunk($input,3));
var_export($output);
wyjściowa:
array (
'USD' =>
array (
'Buy' => '10150.00',
'Sell' => '9850.00',
),
'SGD' =>
array (
'Buy' => '8015.40',
'Sell' => '7915.40',
),
'HKD' =>
array (
'Buy' => '1304.60',
'Sell' => '1288.60',
),
)
Oto podział mojego array_map() funkcji przy użyciu array_chunk():
array_map( // iterate each subarray from array_chunk()
function($a) // $a = each subarray
use(&$output){ // declare the output array as modifiable
$output[$a[0]]= // use 1st subarray value as key
["Buy"=>$a[1], // use 2nd subarray value as Buy value
"Sell"=>$a[2]]; // use 3rd subarray value as Sell value
},
array_chunk($input,3) // feed in an array of 3-element subarrays
);
Późno Edit (myślałem, że spadek o zmiennej liczbie argumentów funkcji w który zapewnia również taki sam efekt):
array_map(function($K,$B,$S)use(&$output){$output[$K]=["Buy"=>$B,"Sell"=>$S];},...array_chunk($input,3));
Przypadkowo, obie metody jedno-liner mieć dokładny Ta sama długość postaci, tak przypuszczam, że sprowadza się to do osobistych preferencji.
Trzeba iterować nad nim i utworzyć pożądaną strukturę, nie ma na to gotowej funkcji. –
@frozenade, twoje pytanie zostanie wysłuchane, czy możesz zaznaczyć jedną odpowiedź jako [zaakceptowano] (http://stackoverflow.com/help/accepted-answer)? –