CustomArrayHelper.php 2.7 KB
<?php
/**
 * Created by PhpStorm.
 * User: Tsurkanov
 * Date: 20.10.2015
 * Time: 14:42
 */

namespace common\components;


class CustomArrayHelper extends \yii\helpers\ArrayHelper {

    /**
     * @param $value_arr - двумерный массив значений, которому нужно присвоить ключи
     * @param $key_array - ключи для вложенного массива
     * @return array - таблица с проименованными колонками
     */

    public static function createAssocArray(array $value_arr, array $key_array, $key_prefix = '')
    {
        // очистка служебного префикса в массиве заголовков
        if ($key_prefix) {
            // @todo оптимизировать - два переворота массива - избыточно
            $key_array = array_flip($key_array);

            array_walk($key_array, function (&$value, $key, $key_prefix) {
                $value = str_replace($key_prefix, '', $value);
            }, $key_prefix);

            $key_array = array_flip($key_array);
            //уберем пустые элементы
            $key_array = array_filter($key_array, function ($value) {
                return $value !== '';
            });
        }
        array_walk( $value_arr,

            function (&$value, $key, $key_array) {
                $res = $value;
                foreach ($res as $sub_key => $sub_value) {
                    if (isset($key_array[$sub_key])) {
                        // если такой ключ в базовом массиве (массиве ключей) есть, то заменим новым, иначе просто удалим
                        $new_key = $key_array[$sub_key];
                        if (!array_key_exists($new_key, $res)) {
                            $res[$new_key] = $value[$sub_key];
                        }
                    }
                        unset($res[$sub_key]);
                        $value = $res;
                }

            },

            $key_array );

        return $value_arr;
    }

    /**
     * @param $value_arr - двумерный массив к которому нужно добавить колонки
     * @param $add_array - массив с колонками (ключи) и значениями колонок
     * @return mixed
     */
    public static function addColumns(array $value_arr, array $add_array)
    {
        $i = 0;
        while ($i < count($value_arr)) {
            foreach ($add_array as $add_key => $add_value) {
                $value_arr[$i][$add_key] = $add_value;
            }
            $i++;
        }
        return $value_arr;
    }
}