Как получить определенную часть ассоциативного массива в php? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть массив типа

$data = [
    'phone' => '9999999999',
    'body' => 'Sample Message',
    'caption' => 'Sample',
    'filename' => 'Sample File.PDF'
];

Я хочу получить определенную часть из массива в другой массив, например

$t_data = [
    'phone' => '9999999999',
    'body' => 'Sample Message'
];

, как это сделать?И это должна быть функция одной строки

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Вот так

print_r(array_intersect_key($data, ['phone'=>0,'body'=>0]));

Вывод

Array
(
    [phone] => 9999999999
    [body] => Sample Message
)

Песочница

Или как функция

function getArrayItems(array $array,$items,$separator=','){
     if(!is_array($items)) $items = array_filter(array_map('trim',explode($separator,$items)),function($i){
       return strlen($i);
     });
     return array_intersect_key($array, array_flip($items));
}

$data = [
    'phone' => '9999999999',
    'body' => 'Sample Message',
    'caption' => 'Sample',
    'filename' => 'Sample File.PDF'
];

print_r(getArrayItems($data, 'body')); // returns [body=>'Sample Message']
print_r(getArrayItems($data, ['body'])); // returns [body=>'Sample Message']
print_r(getArrayItems($data, ['body','caption'])); // returns [body=>'Sample Message','caption' => 'Sample']
print_r(getArrayItems($data, 'body,caption')); // returns [body=>'Sample Message','caption'=>'Sample']
print_r(getArrayItems($data, ' body , caption ')); // returns [body=>'Sample Message','caption'=>'Sample']
print_r(getArrayItems($data, 'body|caption','|')); // returns [body=>'Sample Message','caption'=>'Sample']

Песочница

0 голосов
/ 24 октября 2018

Вы можете использовать помощник laravel array_only ():

$t_data = array_only($data, ["phone", "body"]);
0 голосов
/ 24 октября 2018

Попробуйте это

 $t_data = [
    'phone' =>$data['phone'],
    'body'=>$data['body']

 ];
0 голосов
/ 24 октября 2018

Если вы намеревались взять фрагмент массива, вы можете сделать так:

array_slice($data, 0, 2);

Это займет первые два значения, начиная с нулевой позиции.

...