Как извлечь запись из массива, если у нас есть понятие индекса массива, используя функцию array_column? - PullRequest
0 голосов
/ 19 мая 2018

У меня есть множество криптовалют.Массив выглядит так:

$array = Array ( [0] => Array ( [code] => BTC [name] => Bitcoin [rate] => 1 )
 [1] => Array ( [code] => BCH [name] => Bitcoin Cash [rate] => 7.06364 )
 [2] => Array ( [code] => USD [name] => US Dollar [rate] => 8185.84 ) )

Я получаю результаты, используя $array[1]['rate'];

Но я хочу получить результат по [code].

Как $array['USD']['rate']

Как $array['BCH']['rate']

Как я могу получить курс , используя код валюты, например USD

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Вы можете использовать array_reduce и установить ключ в значение code в функции обратного вызова:

$array = array_reduce($array, function($carry, $item) {
    $carry[$item["code"]] = $item;
    return $carry;
});

echo $array["USD"]["rate"]; //8185.84

Демо

0 голосов
/ 19 мая 2018

Вы можете зациклить массив и создать новый ассоциативный массив для использования в остальной части проекта.

$array = Array( 0 => Array( "code" => "BTC", "name" => "Bitcoin", "rate" => 1 ),
 "1" => Array ( "code" => "BCH", "name" => "Bitcoin Cash", "rate" => 7.06364 ),
 "2" => Array ( "code" => "USD", "name" => "US Dollar", "rate" => 8185.84 ) );

 foreach($array as $val){
     $rates[$val["code"]] = $val;
 }

 echo $rates['USD']['rate']; // 8185.84

https://3v4l.org/0qs0n


Другой вариант - использовать array_column и array_combine, чтобы сделать это без циклов.

$array = Array( 0 => Array( "code" => "BTC", "name" => "Bitcoin", "rate" => 1 ),
 "1" => Array ( "code" => "BCH", "name" => "Bitcoin Cash", "rate" => 7.06364 ),
 "2" => Array ( "code" => "USD", "name" => "US Dollar", "rate" => 8185.84 ) );

 $keys = array_column($array, "code");
 $rates = array_combine($keys, $array);

 echo $rates['USD']['rate'];
...