@kolomat

Как оставить в ассоциативно массиве только определенные ключи?

Добрый день, подскажите по такому вопросу
Есть массив вида
[накладные] => 
    [вес] => 
    [дата] => 
    [фио] => тест
    [телефон] => 
    [город] => 
    [товар] => 
    [суммазаказа] => 
    [остаток] => 1234
    [статусзаказа] => 
    [ок] => 
    [предоплата] => 
    [доставка] => 
    [поставщик] => 
    [статусоплаты] => 
    [оплата] => 
    [ценазакупки] => 
    [прибыль] => 
    [артикул] => 
    [коментарии] => 
    [коментарийклиента] => 
    [датазаказатовара] => 
    [статусдоставки] => 
    [магазин] => 
    [номерзаказа] =>

Из этого массива надо удалить все например кроме, статус доставки и номер заказа
Нашел такой пример
$to_remove = array('key1','key2'......');
$values = array_diff_key($values, array_flip($to_remove));

Пример рабочий, но надо постоянно расписывать ключи которые должны убираться. Возможно подскажите какой-нибудь пример что бы сделать на оборот, записать только ключи которые должны остаться, а все остальное что бы удалялась?
  • Вопрос задан
  • 1216 просмотров
Решения вопроса 2
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
$data = [
    'вес'               => '',
    'дата'              => '',
    'телефон'           => '',
    'город'             => '',
    'товар'             => '',
    'суммазаказа'       => '',
    'остаток'           => '',
    'статусзаказа'      => '',
    'ок'                => '',
    'предоплата'        => '',
    'доставка'          => '24',
    'поставщик'         => '',
    'статусоплаты'      => '',
    'номерзаказа'       => '6666',
    'оплата'            => '',
    'ценазакупки'       => '',
    'прибыль'           => '',
    'артикул'           => '',
    'коментарии'        => '',
    'коментарийклиента' => '',
    'датазаказатовара'  => '',
    'статусдоставки'    => '',
    'магазин'           => '',
];
$filterKeys = ['доставка', 'номерзаказа'];

$result = array_filter($filterKeys, function($key) use ($data) {
    return isset($data[$key]);
});

var_dump($result);

sandbox.onlinephpfunctions.com/code/7093a31de82bcb...
Ответ написан
Target1
@Target1
$find = ['status','num'];
$result = [];
foreach($arr as $key => $val)
{
    if(in_array($key,$find )){
        $result[$key] = $val;
    }
}

print_r($result);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@NinjaNickName
Web разработчик
Хорошей практикой думаю было бы создать новый массив, вместо изменения текущего:

$new_array  = [
'доставка' => $data['доставка'],
'номер_заказа' => $data['номер_заказа'],
];

// дальше работаем с новым массивом
Ответ написан
Ваш ответ на вопрос

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

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