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