Построить многомерный массив из значений ключей именования строк в php

#php #arrays #excel #multidimensional-array #key-value

#php #массивы #excel #многомерный-массив #ключ-значение

Вопрос:

Итак, у меня есть эта проблема, я извлекаю строку из Excel, которая имеет такую структуру:

89.356 87.54, 45.34 98.254, 45.2413 45.2146, 98.23 35.647

И я хочу создать массив со следующей структурой:

 Array
(
    [0] => Array
        (
            ['first'] => 89.356 
            ['second'] => 87.54
        )

    [1] => Array
        (
            ['first'] => 45.34 
            ['second'] => 98.254
        )

    [2] => Array
        (
            ['first'] => 45.2413
            ['second'] => 45.2146
        )
)
  

Я извлекаю эти значения из Excel и создаю массив следующим образом:

 $polygons = $sheet->getCell("B".$row)->getValue();
        $ret = array_map (
            function ($) {return explode (' ', $);},
            explode (',', $polygons)
        );
  

Но я не знаю, как присвоить массиву значения ключей ‘first’ и ‘second’.

Ответ №1:

Прежде всего, просто чтобы указать, что ваш код выдаст ошибку, потому что вы не можете создать переменную без имени ex . в вашем коде у вас есть только $ в качестве переменной.

Вот как вы это делаете.

 $ret = array_map( function( $pol ) {
    $a = array_map( 'floatval', explode( ' ', $pol, 2 ) ); // 1

    return array_combine( ['first', 'second'], $a ); // 2
}, explode( ',', $polygons ) );
  
  1. Преобразование из string в float.
  2. Назначьте первый массив ([‘first’, ‘second’]) в качестве ключа для второго массива

Вывод: var_dump( $ret );

 array(3) {
    [0] => array(2) {
        ["first"] => float(89.356),
        ["second"] => float(89.356),
    },
    [1] => array(2) {
        ["first"] => float(45.34),
        ["second"] => float(98.254),
    },
    [2] => array(2) {
        ["first"] => float(45.2413),
        ["second"] => float(45.2146,
    },
}
  

Комментарии:

1. Привет! большое вам спасибо за вашу помощь, я совершенно новичок в php, на самом деле это мой первый день, когда я пытаюсь это сделать, так что это было действительно полезно.

2. Спасибо, что указали на это @mickmackusa. Я просто предполагал, что он будет содержать только 2 числа с плавающей запятой.

3. @IsraelChavez Рад помочь. 🙂

4. @mickmackusa Только что принял ответ, извините! Я не знал, что мне нужно это делать.