繁体   English   中英

PHP数组。 通过数组从数组中获取价值

[英]PHP Arrays. Get value from array with arrays

我在PHP中有数组:

Array
(
  [1] => Array
    (
        [DeviceName] => Device1
        [DeviceId] => 0x0000001530A1B380
        [state] => 0
        ...
         )
  [2] => Array
    (
        [DeviceName] => Device2
        [DeviceId] => 0x0000001530A10C80
        [state] => 1
        ...
    )
  [3] => Array
    (
        [DeviceName] => Device3
        [DeviceId] => 0x0000001531471600
        [state] => 0
        ...
    )
  ...
)

如何仅从DeviceName = Device2的数组中获取stateDeviceId密钥的值?

我已经尝试过了,但是它从另一个数组返回了deviceID

foreach ($values as $B) {
    $B = preg_replace('~[\r\n]+~', '', $B);
    if ($B['DeviceName'] == $Device) {
        print "Device ID: ".$B['DeviceId']."\n";
    }
}

您可以简单地使用每个循环使用它

foreach ($array as $row) {
  if ($row['DeviceName'] == 'Device2') {
    echo $row['DeviceId'];
    echo $row['state'];
  }
}

这是根据您的阵列的活链接链接

function findDeviceAndState($arr,$deviceName){
    foreach($arr as $sample){
        if($sample['DeviceName']==$deviceName){
            return array($sample['DeviceName'],$sample['state']);
         }
    }
    return null;
}

在代码调用函数中,并假设您的数组名称为$values并假设您只有一个名称为Device2设备

if(($result=findDeviceAndState($values,'Device2'))!=null){
 echo 'DeviceName: '.$result[0];
 echo 'State : '.$result[1]; 
}else{
 die("Device not found!");
}

假设DeviceName是唯一的,则可以提取数组值并通过DeviceName对其进行索引:

$result = array_column($values, null, 'DeviceName');
echo $result['Device2']['state'];

由于您要分配$B ,因此应通过引用将其传递:

 foreach($values as &$B)

有几种方法可以做到这一点。 我可能会使用一个函数来返回搜索结果数组。 如果希望找到Device2多个实例,则需要遍历数组并查找匹配的结果。

function findDevice2(array $devices) : array
{
    $results = [];
    foreach ($devices as $device) {
        if ($device['DeviceName'] == 'Device2') {
            $format = [
                'DeviceId' => $device['DeviceId'],
                'state' => $device['state']
            ];
            array_push($results, $format);
        }
    }
    return $results;
}

$foundSet = findDevice2($array);

var_dump($foundSet);

此函数接受传入的数组,遍历每条记录以查找DeviceName为Device2。 找到后,它将DeviceId和State推入结果数组以返回。 这样,您最终只能得到所需结果的数组。

array(1) {
  [0] =>
  array(2) {
    'DeviceId' =>
    string(18) "0x0000001531471600"
    'state' =>
    int(0)
  }
}

如果您未使用PHP 7.0+,则只需从函数中删除类型声明即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM