Оптимизировать запрос извлечения массива php (если возможно, используя функциональные операторы)

Я пытался выяснить, есть ли лучший способ перенести это (коллекцию Laravel) в обычный массив PHP (желательно с использованием функциональных операторов).

Текущие данные

array:4 [▼
  "HIGH" => array:2 [▼
    0 => array:15 [▶]
    1 => array:15 [▶]
  ]
  "MEDIUM" => array:3 [▶]
  "LOW" => array:2 [▶]
  "INFO" => array:1 [▶]
]

Текущий код

 $labelarr = [];
 $countarr = [];

 foreach ($labelCount as $k => $v) {
    array_push($labelarr, $k);
    $currentcount = count($v);
    array_push($countarr, $currentcount);
 }

Итак, у меня есть два массива; один с этикетками, i. e. ['ВЫСОКИЙ,' СРЕДНИЙ ',' НИЗКИЙ, ...] и один, содержащий счетчик [2, 3, 2, ...].

Есть ли лучший способ оптимизировать вышеперечисленное (попытаться изучить новые методы)?

1
0
19
1

Ответы 1

Для этого можно использовать комбинацию функций. array_keys() извлекает ключи массива, поэтому дает ваши метки. array_map() позволяет вам применять функцию к каждому элементу массива, и это позволяет вам выполнять count().

$labelCount = ["HIGH" => [1,2], "MEDIUM" => [2,4,6]];

$labelarr = array_keys($labelCount);
$countarr = array_values(array_map(function ($data) { return count($data); }, $labelCount));

print_r($labelarr);
print_r($countarr);

выведет

Array
(
    [0] => HIGH
    [1] => MEDIUM
)
Array
(
    [0] => 2
    [1] => 3
)

Хотя я не уверен, что это оптимизирует его, поскольку иногда использование простого foreach() может быть быстрее и читабельнее.

Другие вопросы по теме