Shameless19
@Shameless19

Как переформулировать код?

Есть массив
$items = [
	[
	'name'=> "1name",
	'qual'=>34,
	],

	['name'=>'2name',
	'qual'=>2
	],
];

Сейчас, чтобы получить второй элемент массива использую
$My_qual= $item[$key]['qual'];

Возможно ли сделать тоже самое, но не используя название нужного поля ("qual")?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 2
@rPman
если идти строго по поставленной в вопросе задачи, то можно взять список ключей объекта, взять нужный по номеру и использовать
$items[$key][array_keys($items[$key])[1]]
но так делать однозначно не нужно, никто не гарантирует что порядок элементов в массиве ключей останется прежним, придется все перепроверять.
Ответ написан
Комментировать
v3shin
@v3shin
Веб-шаман
Class Item {
    public string $name = '';
    public float $qual = 0;
    public function __construct(array $attributes = [])
    {
        foreach ($attributes as $key => $value) {
            $this->$key = $value;
        }
    }

    public function __toString()
    {
        return "$this->qual"; // семантическая х-ня
    }
}

// ...

$items = array_map(function (array $item) {
    return new Item($item);
}, $items);
var_dump("$items[0]" + 100);

Но так лучше не делать.

class Items {
    public array $items = [];
    public function __construct(array $items = [])
    {
        $this->items = $items;
    }
    public function __invoke(int $key)
    {
        return $this->items[$key]['qual'] ?? null;
    }
}

// ...

$items = new Items($items);
var_dump($items(0));

Но так тоже лучше не делать.

Лучше не выпендриваться и использовать встроенные средства php для доступа к переменным.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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