通过兄弟键从 AWS SDK (describeInstances) 选择多维数组成员
Selecting multidimensional array member from AWS SDK (describeInstances) by sibling key
我在 php 上使用 AWS SDK 来获取远程桌面客户端的实例信息。我已经包含了一个我正在检索的数组成员的示例。我已经通过此数组中提供的标签之一进行过滤,以仅接收组 "ABC" 的项目。过滤后,我想为数组的每个成员检索另一个称为 "clientId" 的标记的值。因为索引不一致,所以我不能通过 $results['Instances'][0]['Tags'][0]['Value] 简单地 select 项目。有时它是不同的数字(如 $results['Instances'][0]['Tags'][1]['Value])。我想根据其兄弟 (Key => clientId) select 它,但我找不到这样做的方法。
感谢您提供的任何帮助。
这是 'describeInstances' AWS SDK 返回的一个数组成员的示例:
[0] => Array
(
[Groups] => Array
(
)
[Instances] => Array
(
[0] => Array
(
[AmiLaunchIndex] => 0
[ImageId] => ami-11111111111111111
[InstanceId] => i-11111111111111111
[InstanceType] => t3.large
[KeyName] => awskeypair_PUBLIC
[LaunchTime] => Aws\Api\DateTimeResult Object
(
[date] => 2019-06-22 04:08:37.000000
[timezone_type] => 2
[timezone] => Z
)
[Monitoring] => Array
(
[State] => disabled
)
[Placement] => Array
(
[AvailabilityZone] => us-west-1a
[GroupName] =>
[Tenancy] => default
)
[Platform] => windows
[PrivateDnsName] => ip-111-11-11-111.us-west-1.compute.internal
[PrivateIpAddress] => 111.11.11.1111 [ProductCodes] => Array
(
)
[PublicDnsName] => ec2-11-11-11-11.us-west-1.compute.amazonaws.com
[PublicIpAddress] => 11.11.11.11
[State] => Array
(
[Code] => 16
[Name] => running
)
[StateTransitionReason] =>
[SubnetId] => subnet-1111c1f1
[VpcId] => vpc-e11fb111
[Architecture] => x86_64
[BlockDeviceMappings] => Array
(
[0] => Array
(
[DeviceName] => /dev/sda1
[Ebs] => Array
(
[AttachTime] => Aws\Api\DateTimeResult Object
(
[date] => 2019-05-10 14:55:20.000000
[timezone_type] => 2
[timezone] => Z
)
[DeleteOnTermination] => 1
[Status] => attached
[VolumeId] => vol-11111111111111111
)
)
)
[ClientToken] =>
[EbsOptimized] => 1
[EnaSupport] => 1
[Hypervisor] => xen
[NetworkInterfaces] => Array
(
[0] => Array
(
[Association] => Array
(
[IpOwnerId] => amazon
[PublicDnsName] => ec2-11-11-11-11.us-west-1.compute.amazonaws.com
[PublicIp] => 11.11.11.11
)
[Attachment] => Array
(
[AttachTime] => Aws\Api\DateTimeResult Object
(
[date] => 2019-05-10 14:55:19.000000
[timezone_type] => 2
[timezone] => Z
)
[AttachmentId] => eni-attach-1111111111111111
[DeleteOnTermination] => 1
[DeviceIndex] => 0
[Status] => attached
)
[Description] =>
[Groups] => Array
(
[0] => Array
(
[GroupName] => launch-wizard-20
[GroupId] => sg-11111111111111111
)
)
[Ipv6Addresses] => Array
(
)
[MacAddress] => 02:5e:b0:33:b0:6e
[NetworkInterfaceId] => eni-023ccaf7dd1ade14c
[OwnerId] => 111111111111
[PrivateDnsName] => ip-111-11-11-111.us-west-1.compute.internal
[PrivateIpAddress] => 111.11.11.111
[PrivateIpAddresses] => Array
(
[0] => Array
(
[Association] => Array
(
[IpOwnerId] => amazon
[PublicDnsName] => ec2-11-11-11-11.us-west-1.compute.amazonaws.com
[PublicIp] => 11.11.11.11
)
[Primary] => 1
[PrivateDnsName] => ip-111-11-11-111.us-west-1.compute.internal
[PrivateIpAddress] => 111.11.11.111
)
)
[SourceDestCheck] => 1
[Status] => in-use
[SubnetId] => subnet-11111111
[VpcId] => vpc-e08fb484
[InterfaceType] => interface
)
)
[RootDeviceName] => /dev/sda1
[RootDeviceType] => ebs
[SecurityGroups] => Array
(
[0] => Array
(
[GroupName] => launch-wizard-20
[GroupId] => sg-1c1111111c111d17b
)
)
[SourceDestCheck] => 1
[Tags] => Array
(
[0] => Array
(
[Key] => clientId
[Value] => 1234
)
[1] => Array
(
[Key] => Group
[Value] => ABC
)
[2] => Array
(
[Key] => Name
[Value] => ABC - This company's name
)
)
[VirtualizationType] => hvm
[CpuOptions] => Array
(
[CoreCount] => 1
[ThreadsPerCore] => 2
)
[CapacityReservationSpecification] => Array
(
[CapacityReservationPreference] => open
)
[HibernationOptions] => Array
(
[Configured] =>
)
)
)
[OwnerId] => 621273892911
[ReservationId] => r-1111111111111111
)
$results = [
[
'key' => 'Group',
'value' => '123',
],
[
'key' => 'clientId',
'value' => '1234',
],
[
'key' => 'Name',
'value' => 'ABC - This company\'s name',
]
];
$index = array_search('clientId', array_column($results, 'key'));
if($index===false) {
//error handling
}
var_dump($results[$index]);
另请参阅:
我在 php 上使用 AWS SDK 来获取远程桌面客户端的实例信息。我已经包含了一个我正在检索的数组成员的示例。我已经通过此数组中提供的标签之一进行过滤,以仅接收组 "ABC" 的项目。过滤后,我想为数组的每个成员检索另一个称为 "clientId" 的标记的值。因为索引不一致,所以我不能通过 $results['Instances'][0]['Tags'][0]['Value] 简单地 select 项目。有时它是不同的数字(如 $results['Instances'][0]['Tags'][1]['Value])。我想根据其兄弟 (Key => clientId) select 它,但我找不到这样做的方法。
感谢您提供的任何帮助。
这是 'describeInstances' AWS SDK 返回的一个数组成员的示例:
[0] => Array
(
[Groups] => Array
(
)
[Instances] => Array
(
[0] => Array
(
[AmiLaunchIndex] => 0
[ImageId] => ami-11111111111111111
[InstanceId] => i-11111111111111111
[InstanceType] => t3.large
[KeyName] => awskeypair_PUBLIC
[LaunchTime] => Aws\Api\DateTimeResult Object
(
[date] => 2019-06-22 04:08:37.000000
[timezone_type] => 2
[timezone] => Z
)
[Monitoring] => Array
(
[State] => disabled
)
[Placement] => Array
(
[AvailabilityZone] => us-west-1a
[GroupName] =>
[Tenancy] => default
)
[Platform] => windows
[PrivateDnsName] => ip-111-11-11-111.us-west-1.compute.internal
[PrivateIpAddress] => 111.11.11.1111 [ProductCodes] => Array
(
)
[PublicDnsName] => ec2-11-11-11-11.us-west-1.compute.amazonaws.com
[PublicIpAddress] => 11.11.11.11
[State] => Array
(
[Code] => 16
[Name] => running
)
[StateTransitionReason] =>
[SubnetId] => subnet-1111c1f1
[VpcId] => vpc-e11fb111
[Architecture] => x86_64
[BlockDeviceMappings] => Array
(
[0] => Array
(
[DeviceName] => /dev/sda1
[Ebs] => Array
(
[AttachTime] => Aws\Api\DateTimeResult Object
(
[date] => 2019-05-10 14:55:20.000000
[timezone_type] => 2
[timezone] => Z
)
[DeleteOnTermination] => 1
[Status] => attached
[VolumeId] => vol-11111111111111111
)
)
)
[ClientToken] =>
[EbsOptimized] => 1
[EnaSupport] => 1
[Hypervisor] => xen
[NetworkInterfaces] => Array
(
[0] => Array
(
[Association] => Array
(
[IpOwnerId] => amazon
[PublicDnsName] => ec2-11-11-11-11.us-west-1.compute.amazonaws.com
[PublicIp] => 11.11.11.11
)
[Attachment] => Array
(
[AttachTime] => Aws\Api\DateTimeResult Object
(
[date] => 2019-05-10 14:55:19.000000
[timezone_type] => 2
[timezone] => Z
)
[AttachmentId] => eni-attach-1111111111111111
[DeleteOnTermination] => 1
[DeviceIndex] => 0
[Status] => attached
)
[Description] =>
[Groups] => Array
(
[0] => Array
(
[GroupName] => launch-wizard-20
[GroupId] => sg-11111111111111111
)
)
[Ipv6Addresses] => Array
(
)
[MacAddress] => 02:5e:b0:33:b0:6e
[NetworkInterfaceId] => eni-023ccaf7dd1ade14c
[OwnerId] => 111111111111
[PrivateDnsName] => ip-111-11-11-111.us-west-1.compute.internal
[PrivateIpAddress] => 111.11.11.111
[PrivateIpAddresses] => Array
(
[0] => Array
(
[Association] => Array
(
[IpOwnerId] => amazon
[PublicDnsName] => ec2-11-11-11-11.us-west-1.compute.amazonaws.com
[PublicIp] => 11.11.11.11
)
[Primary] => 1
[PrivateDnsName] => ip-111-11-11-111.us-west-1.compute.internal
[PrivateIpAddress] => 111.11.11.111
)
)
[SourceDestCheck] => 1
[Status] => in-use
[SubnetId] => subnet-11111111
[VpcId] => vpc-e08fb484
[InterfaceType] => interface
)
)
[RootDeviceName] => /dev/sda1
[RootDeviceType] => ebs
[SecurityGroups] => Array
(
[0] => Array
(
[GroupName] => launch-wizard-20
[GroupId] => sg-1c1111111c111d17b
)
)
[SourceDestCheck] => 1
[Tags] => Array
(
[0] => Array
(
[Key] => clientId
[Value] => 1234
)
[1] => Array
(
[Key] => Group
[Value] => ABC
)
[2] => Array
(
[Key] => Name
[Value] => ABC - This company's name
)
)
[VirtualizationType] => hvm
[CpuOptions] => Array
(
[CoreCount] => 1
[ThreadsPerCore] => 2
)
[CapacityReservationSpecification] => Array
(
[CapacityReservationPreference] => open
)
[HibernationOptions] => Array
(
[Configured] =>
)
)
)
[OwnerId] => 621273892911
[ReservationId] => r-1111111111111111
)
$results = [
[
'key' => 'Group',
'value' => '123',
],
[
'key' => 'clientId',
'value' => '1234',
],
[
'key' => 'Name',
'value' => 'ABC - This company\'s name',
]
];
$index = array_search('clientId', array_column($results, 'key'));
if($index===false) {
//error handling
}
var_dump($results[$index]);
另请参阅: