2015-01-23 4 views
0

У меня есть массив как это:PHP манипулировать массив строки в ассоциативный массив

array(4) { 

    [0] => "1. \Device\NPF_{1AAAAA99-7933-4CBC-AF26-2A1C1394BD94} (VirtualBox Host-Only Network)" 

    [1] => "2. \Device\NPF_{2BBBBB88-75BB-4CD0-970A-36430287C245} (Wireless Network Connection 6)" 

    [2] => "3. \Device\NPF_{3CCCCC77-8469-4445-A2ED-9C0FDDBA1C3D} (Wireless Network Connection 7)" 

    [3] => "4. \Device\NPF_{4EEEEE66-2C9D-4D47-B7EA-8A20A40A149B} (Local Area Connection)" 

} 

и хотел бы манипулировать в новый ассоциативный массив так:

array(4) { 

    ["1"] => "VirtualBox Host-Only Network" 

    ["2"] => "Wireless Network Connection 6" 

    ["3"] => "Wireless Network Connection 7" 

    ["4"] => "Local Area Connection" 

} 

Я понимаю, что я мог бы использовать цикл foreach, чтобы пройти через исходный массив, а затем в каждой итерации использовать функцию substr, чтобы получить первый символ для нового ключа массива и искать предложение внутри шаблона(), но не удалось реализовать это. Любое предложение очень ценится! Благодаря!

+0

Вы должны размещать код, который вы пробовали. –

ответ

3

В PHP вы можете сделать это без петель:

$data = [ 
    "1. \Device\NPF_{1AAAAA99-7933-4CBC-AF26-2A1C1394BD94} (VirtualBox Host-Only Network)", 
    "2. \Device\NPF_{2BBBBB88-75BB-4CD0-970A-36430287C245} (Wireless Network Connection 6)", 
    "3. \Device\NPF_{3CCCCC77-8469-4445-A2ED-9C0FDDBA1C3D} (Wireless Network Connection 7)", 
    "4. \Device\NPF_{4EEEEE66-2C9D-4D47-B7EA-8A20A40A149B} (Local Area Connection)", 
    ]; 

$names = array_combine(
    preg_replace('~\D.*~', '', $data), 
    preg_replace('~.*\((.+?)\)$~', '$1', $data)); 

print_r($names); 

Результат:

Array 
(
    [1] => VirtualBox Host-Only Network 
    [2] => Wireless Network Connection 6 
    [3] => Wireless Network Connection 7 
    [4] => Local Area Connection 
) 
+0

Ничего себе, это быстро! Тем не менее, мне нужен последний ключ массива, полученный от первого charater исходного массива (например, 1. 2. 3. 4.). Могу ли я добиться этого с помощью вашего подхода? Большое большое спасибо! – osappuk

+0

@osappuk: исправлено! – georg

+0

Ничего себе, работа волшебника! Пройдя все ответы, меня поражает истинная сила регулярного выражения и preg_match. Моя следующая тема исследования. Еще раз спасибо, всем! – osappuk

0

Ваш код должен выглядеть примерно так,

<?php 
$items_extended = array("1. \\Device\\NPF_{1AAAAA99-7933-4CBC-AF26-2A1C1394BD94} (VirtualBox Host-Only Network)", 
"2. \\Device\\NPF_{2BBBBB88-75BB-4CD0-970A-36430287C245} (Wireless Network Connection 6)", 
"3. \\Device\\NPF_{3CCCCC77-8469-4445-A2ED-9C0FDDBA1C3D} (Wireless Network Connection 7)", 
"4. \\Device\\NPF_{4EEEEE66-2C9D-4D47-B7EA-8A20A40A149B} (Local Area Connection)"); 
$items = array(); 
foreach($items_extended as $key => $value){ 
    preg_match('#\((.*?)\)#', $value, $match); 
    $items[($key + 1)] = $match[0]; 
} 
?> 
+0

Большое вам спасибо, ваше решение также работает как шарм! Мне жаль, что у меня больше репутации для голосования! Очень признателен! – osappuk

0

Попробуйте использовать этот код: с помощью Еогеасп, он должен работать. Чтобы проверить регулярное выражение: http://www.phpliveregex.com/

<? 
var $arrInputs = array (......); // you put your array with data 

var $arrest = []; 
foreach ($arrInputs as $key => $input_line){ 

preg_match("(^.).*[(](.*)[)]$", $input_line, $output_array); 

$arrest[$output_array[1]] = $output_array[2]; 

} 

print_r($arrest); 


%> 
+0

Большое вам спасибо! – osappuk

Смежные вопросы