kimono
@kimono
Web developer

Что не так с ArrayHelper::index YII2?

Здесь www.yiiframework.com/doc-2.0/guide-helper-array.ht... сказано о возможности группировки массива так, что из:
$array = [
    ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
    ['id' => '345', 'data' => 'def', 'device' => 'tablet'],
    ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
];

можно получить:
$array = [
    '123' => [
        ['id' => '123', 'data' => 'abc', 'device' => 'laptop']
    ],
    '345' => [ // all elements with this index are present in the result array
        ['id' => '345', 'data' => 'def', 'device' => 'tablet'],
        ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
    ]
]

На деле этого не происходит. Откуда взялась такая документация? Возможно перепутали названия методов?

В частности:
$a = [
        ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
        ['id' => '345', 'data' => 'def', 'device' => 'tablet'],
        ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
    ];

    $b = yii\helpers\ArrayHelper::index($a, null, 'id');

    var_dump($b);

выдает
array (size=1)
  '' => 
    array (size=3)
      'id' => string '345' (length=3)
      'data' => string 'hgi' (length=3)
      'device' => string 'smartphone' (length=10)
  • Вопрос задан
  • 1212 просмотров
Решения вопроса 1
kimono
@kimono Автор вопроса
Web developer
Вопрос закрыт. Видимо это ошибка в документации. Жаль, функционал нужный.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
mitaichik
@mitaichik
Все прекрасно работает, что то не так с вашим кодом. Может опубликуете его - подскажут предметно.
Ответ написан
Все работает. Ток что проверил в контроллере
public function actionToggle()
    {
        $a = [
            ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
            ['id' => '345', 'data' => 'def', 'device' => 'tablet'],
            ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
        ];

        $b = ArrayHelper::index($a, 'id');

        return $this->render('toggle', [
            'b' => $b,
        ]);
    }


в View toggle
<?php
/* @var $this yii\web\View */

$this->title = 'Ars';
?>

<h1>Привет</h1>

<?php
echo "<pre>";
var_dump($b);
?>


массив такого формата стал
array(2) {
  [123]=>  array(3) {
    ["id"]=>    string(3) "123"
    ["data"]=>    string(3) "abc"
    ["device"]=>    string(6) "laptop"
  }
  [345]=>
  array(3) {
    ["id"]=>    string(3) "345"
    ["data"]=>    string(3) "hgi"
    ["device"]=>    string(10) "smartphone"
  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы