Как получить значение из массива?

Добрый день! У меня есть массив, в котором содержится информация, например, переменная со значением 137 соответствует значению в поле tariff_id этого массива. Мне необходимо получить значение поля mode_id, которое в данном случае равно 3. 

В текущем решении я использую следующий код: 
<pre><code class="php">$array // массив
         $del_val = '137'; // переменная
         foreach ($array as $key=&gt;$arr) {
            if ($arr['tariff_id']!=$del_val) unset($array[$key]);
}

$data = array();
foreach($array as $key =&gt; $value) {
    foreach($value as $key1 =&gt; $value1) {
        $data[$key1] = $value1;
    }
}
echo $data['mode_id'];</code></pre> 

Хотя это решение работает, мне хотелось бы узнать, есть ли более элегантный способ получить значение mode_id?
  • 8 октября 2024 г. 12:35
Ответы на вопрос 2
Да, есть более элегантные способы, чтобы получить значение `mode_id` из вашего массива. Вместо выполнения двух вложенных циклов и использования `unset()`, вы можете использовать функцию `array_filter()` или просто один цикл `foreach`. 

Вот несколько примеров, как это можно сделать.

### Пример 1: Использование `array_filter()`
```php
$array = [
    ['tariff_id' => '137', 'mode_id' => 3],
    ['tariff_id' => '138', 'mode_id' => 4],
];

$del_val = '137'; // переменная

$filtered = array_filter($array, function($item) use ($del_val) {
    return $item['tariff_id'] == $del_val;
});

if (!empty($filtered)) {
    $data = reset($filtered); // берем первый элемент из отфильтрованного массива
    echo $data['mode_id']; // выведет 3
}
```

### Пример 2: Простой `foreach`
```php
$array = [
    ['tariff_id' => '137', 'mode_id' => 3],
    ['tariff_id' => '138', 'mode_id' => 4],
];

$del_val = '137'; // переменная

$mode_id = null;
foreach ($array as $item) {
    if ($item['tariff_id'] == $del_val) {
        $mode_id = $item['mode_id'];
        break; // выходим из цикла, как только нашли нужный элемент
    }
}

echo $mode_id; // выведет 3
```

### Объяснение
1. **Использование `array_filter()`**: Этот метод позволяет отфильтровать элементы массива по заданному критерию. После фильтрации мы можем извлечь первый элемент и получить значение `mode_id`.
  
2. **Простой цикл `foreach`**: Этот метод более прямолинейный, просто проходим по массиву и ищем нужный `tariff_id`. Как только найден нужный элемент, мы сохраняем его `mode_id` и выходим из цикла.

Оба способа более лаконичны и удобны по сравнению с вашим первоначальным кодом. Вы можете выбрать тот, который вам больше нравится!
$array = [...];
$del_val = '137';

// В современном PHP
$data = array_filter($array, fn (array $item): bool => $item['tariff_id'] == $del_val);

// Если у вас старая версия
$data = array_filter($array, function (array $item) use ($del_val): bool {
    return $item['tariff_id'] == $del_val;
});

$item = end($data);
echo $item['mode_id'];

// Но можно и вашу версию доработать
$data = null;
foreach ($array as $arr) {
    if ($arr['tariff_id'] == $del_val) {
        $data = $arr;
    }
}

echo $data ? $data['mode_id'] : 'not found';
Похожие вопросы