Php 如何使用数组中的元素作为键创建关联数组,并将数组用于相应的值?

Php 如何使用数组中的元素作为键创建关联数组,并将数组用于相应的值?,php,arrays,Php,Arrays,我有阵列$devices,$port print_r($devices); Array( [0] => cisco1 [1] => cisco2 ) print_r($port); Array ( [0] => Port1/1/1 [1] => Port1/1/10 [2] => Port1/1/11 ) 我想创建一个数组$devlist,如下所示: Array( [cisco1] =>Port1/1/1 Port1/1/10

我有阵列$devices,$port

print_r($devices);
Array(
[0] => cisco1
[1] => cisco2
 )

print_r($port);
Array
(
[0] => Port1/1/1
[1] => Port1/1/10
[2] => Port1/1/11
) 
我想创建一个数组$devlist,如下所示:

Array(

[cisco1] =>Port1/1/1
           Port1/1/10
           Port1/1/11

[cisco2] =>Port2/1/1
           Port2/1/10
           Port2/1/11

)
$arr = array
(
    'cisco1' => array 
    (
        'Port1/1/1', 
        'Port1/1/10',
        'Port1/1/11'
    ),
    'cisco2' => array
    (
        'Port1/1/1', 
        'Port1/1/10',
        'Port1/1/11'
    )
);

foreach($arr as $key => $value) // use the foreach-loop like this to get both keys and values
{
    echo "$key: <br />-" . implode('<br />-', $value) . '<br /><br />';
}
我的观点是,每个设备中都有一个设备阵列($devices)和端口阵列。 将为$device数组中的每个设备新创建$port数组

到目前为止,我所尝试的:

foreach ($devices as $value)
{
$port=();
//iam polling the respective device and getting a list of ports available for that device in array **$port**

array_push($devices[$value], $port);
}
此方法生成错误“array_push()期望参数1为array,给定null”


如果这似乎是一个简单的问题,请原谅,因为我对php和脚本也不熟悉:(

您可以使用
foreach
for
循环,但最重要的是您必须使用

解决方案一:

$devlist = array();
foreach($devices as $key => $device){
$devlist[$device] = ${"port".($key+1)};
}
$devlist = array();
$size = sizeof($devices);
for($i = 0; $i < $size; $i++){
$devlist[$devices[$i]] = ${"port".($i+1)};
}
解决方案二:

$devlist = array();
foreach($devices as $key => $device){
$devlist[$device] = ${"port".($key+1)};
}
$devlist = array();
$size = sizeof($devices);
for($i = 0; $i < $size; $i++){
$devlist[$devices[$i]] = ${"port".($i+1)};
}
$devlist=array();
$size=sizeof($devices);
对于($i=0;$i<$size;$i++){
$devlist[$devices[$i]]=${“端口”。$i+1};
}

如果我理解你的问题,你想要这样的东西:

Array(

[cisco1] =>Port1/1/1
           Port1/1/10
           Port1/1/11

[cisco2] =>Port2/1/1
           Port2/1/10
           Port2/1/11

)
$arr = array
(
    'cisco1' => array 
    (
        'Port1/1/1', 
        'Port1/1/10',
        'Port1/1/11'
    ),
    'cisco2' => array
    (
        'Port1/1/1', 
        'Port1/1/10',
        'Port1/1/11'
    )
);

foreach($arr as $key => $value) // use the foreach-loop like this to get both keys and values
{
    echo "$key: <br />-" . implode('<br />-', $value) . '<br /><br />';
}

你想要这样的东西吗?如果是这样的话,我不明白为什么,当你可以只使用$ports中的值作为每个$device时

$devices = array
(
    'cisco1', 'cisco2'
);

$ports = array 
(
    'Port1/1/1',
    'Port1/1/10',
    'Port1/1/11'
);

$dev_list = array();

foreach ($devices as $device) 
{
    $dev_list[$device] = array();

    foreach ($ports as $port) 
    {
        array_push($dev_list[$device], $port);
    }
}

echo '<pre>';
print_r($dev_list);
echo '</pre>';

Array
(
    [cisco1] => Array
        (
            [0] => Port1/1/1
            [1] => Port1/1/10
            [2] => Port1/1/11
        )

    [cisco2] => Array
        (
            [0] => Port1/1/1
            [1] => Port1/1/10
            [2] => Port1/1/11
        )

)
$devices=array
(
‘cisco1’、‘cisco2’
);
$ports=阵列
(
“端口1/1/1”,
“端口1/1/10”,
“端口1/1/11”
);
$dev_list=array();
foreach($devices作为$device)
{
$dev_list[$device]=array();
foreach($port作为$port)
{
阵列推送($dev_list[$device],$port);
}
}
回声';
打印(开发列表);
回声';
排列
(
[cisco1]=>阵列
(
[0]=>端口1/1/1
[1] =>端口1/1/10
[2] =>端口1/1/11
)
[cisco2]=>阵列
(
[0]=>端口1/1/1
[1] =>端口1/1/10
[2] =>端口1/1/11
)
)
试试这个:


$devlist[$devices[$i]]=${“port.”($i+1)};此行会将$port1、$port2……分配给$devlist[$devices]对吗?我编辑了我的问题并删除了$port1、$port2等……。有jus 1数组$port会被每个($devices as$value)覆盖…不,我恐怕你误解了,我的问题是首先如何形成$arr?我有$cisco1和$cisco2…我如何制作一个以cisco1、cisco2等为键,以$port数组为值的数组?添加了一个新的答案,希望能有所帮助。:)但如果这是您正在寻找的,我不明白?是的,我应该这样做:$dev_list[$device]=$port;你的详细帖子让它更清楚了:)正如我说的,我还是有点傻……谢谢你,没问题,但你为什么要这样?您将复制新数组中的所有值,而不仅仅是使用$ports数组?$ports对于$devices中的每个设备都不相同…上面我给出的只是一个示例…所以$ports对于$devices中的每个$device都不同…所以没有重复,对吗,但是,您可以使用cisco1、cisco2等设置$devices阵列。。作为键,从一开始将空数组作为值,然后将端口作为值添加,而不是首先将它们放入$ports数组?:)我首先必须对端口阵列进行一些操作,比如array_unique…因此我必须先获得阵列中的端口列表,然后对它们进行操作并动态分配:)