PHP数组。使用数组从数组中获取值

PHP数组。使用数组从数组中获取值,php,arrays,Php,Arrays,我有PHP中的数组: Array ( [1] => Array ( [DeviceName] => Device1 [DeviceId] => 0x0000001530A1B380 [state] => 0 ... ) [2] => Array ( [DeviceName] => Device2 [DeviceId] =&g

我有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的数组中获取
state
DeviceId
键的值

我尝试过这个,但它从另一个数组返回
deviceID

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

您可以使用for each循环简单地访问它

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

这是基于您的阵列的实时链接

您只需使用for each loop访问即可

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

这里是基于您的数组的实时链接

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

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

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

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

由于您正在分配
$B
,因此应通过引用传递它:

 foreach($values as &$B)

由于您正在分配
$B
,因此应通过引用传递它:

 foreach($values as &$B)
在代码调用函数中,假设数组名为
$values
,并假设只有一个设备名为
Device2

if(($result=findDeviceAndState($values,'Device2'))!=null){
 echo 'DeviceName: '.$result[0];
 echo 'State : '.$result[1]; 
}else{
 die("Device not found!");
}
在代码调用函数中,假设数组名为
$values
,并假设只有一个设备名为
Device2

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

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

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和状态推送到要返回的结果数组中。这样,您将得到一个数组,其中只包含您想要的结果

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

如果您没有使用PHP7.0+,只需从函数中删除类型声明

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

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和状态推送到要返回的结果数组中。这样,您将得到一个数组,其中只包含您想要的结果

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


如果您没有使用PHP7.0+,只需从函数中删除类型声明

到目前为止,您尝试了什么?@Ebrahim Poursadeqi,我尝试过:
foreach($B){$B=preg\u replace(“~[\r\n]+~”,“,”,$B);if($B['DeviceName]=$Device){print”设备ID:“.$B['DeviceId'.\n”}
但它从另一个数组返回DeviceId=(到目前为止你都试了些什么?@Ebrahim Poursadeqi,我试过:
foreach($B){$B=preg\u replace(“~[\r\n]+~”,“$B”);if($B['DeviceName]==$Device){print”Device ID:“.$B['DeviceId'.\n”}
但它从另一个数组返回DeviceId=(天哪,对不起,伙计们!我查看了我脚本的旧输出。)(在txt文件中)。这就是为什么当DeviceID不匹配时我感到困惑的原因。非常感谢!很高兴提供帮助。:)有没有办法插入条件来检查我是否找到了名为“Device2”的设备。我尝试了:
foreach($row的值){$row=preg\u replace('~[\r\n]+~,'$row);if(isset($row['DeviceName'))和($row['DeviceName')]==$Device){print“DeviceID:”.$row['DeviceID'].“\n”}其他{print“UNKNOWN:Device”。$Device。“未找到!\n”;}
我得到结果:
未找到设备:HAImage1。设备ID:0x0000000BF239A900未找到设备:HAImage1。未找到设备:HAImage1。未找到设备:HAImage1。
如果“HAImage1”,我只希望收到一个回复找不到。=|天哪,对不起,伙计们!我查看了我的脚本的旧输出(在txt文件中)。这就是为什么当DeviceID不匹配时我感到困惑的原因。非常感谢!很高兴提供帮助。:)有没有办法插入条件来检查我是否找到名为“Device2”的设备。我尝试了:
foreach($row的值){$row=preg\u replace('~[\r\n]+~'、''.$row);if(isset($row['DeviceName'])和($row['DeviceName']=$Device)){print“DeviceID:”.$row['DeviceID'].“\n”;}否则{print“UNKNOWN:Device”。$Device。“未找到!\n”;}
我得到的结果:
未找到设备:HAImage1。设备ID:0x0000000BF239A900未找到设备:HAImage1。未找到设备:HAImage1。未找到设备:HAImage1。
如果未找到“HAImage1”,我只希望收到一个回复。=|解析错误:语法错误,第46行的check_stardwind.php中意外的“[”返回[$sample]['DeviceName'],$sample['DeviceID'];我使用PHP5.3.3=)可能是因为这个原因)@whi1test我的代码中没有这一行
[$sample['DeviceName'],$sample['DeviceID']
。我有
[$sample['DeviceName'],$sample['state'];
您将
$sample['state']
更改为
$sample['DeviceID']
?@test yes,我将
[]
更改为
数组
。您可以在@Ebrahim Poursadeqi测试它,是的,现在它工作了!我刚刚在foreach in函数下面添加了
$sample=preg\u replace(“~[\r\n]+~”,“$sample”)
。解析错误:语法错误,在check\u stardwind.php第46行返回[$sample]['DeviceName'],$sample['DeviceID'];我使用PHP5.3.3=)可能是因为这个原因)@whi1test我的代码中没有这一行
[$sample['DeviceName'],$sample['DeviceID']
。我有
[$sample['DeviceName'],$sample['state'];
您将
$sample['state']
更改为
$sample['DeviceID']
?@虽然测试结果是肯定的,但我将
[]
更改为
array
。您可以在@Ebrahim Poursadeqi测试它,是的,现在它开始工作了!我刚刚在foreach函数下面添加了
$sample=preg\u replace(“~[\r\n]+~,”,$sample);