【问题标题】:Loop through multidimensional array and find matching values循环遍历多维数组并找到匹配的值
【发布时间】:2014-09-23 04:04:36
【问题描述】:

我正在寻找一种方法来循环遍历多维数组,如果 key master 为 true,则使用 if(或 simular)查找匹配值。

数组:

    Array
(
    [0] => Array
        (
            [namn] => Vardagsrum
            [IP] => 192.168.1.232
            [rincon] => RINCON_000E58A64F1601400
            [rincon_live] => RINCON_000E58A64F1601400
            [master] => 1
        )

    [1] => Array
        (
            [namn] => Badrum
            [IP] => 192.168.1.137
            [rincon] => RINCON_B8E937580A5801400
            [rincon_live] => RINCON_000E58A64F1601400
            [slave] => 1
        )

    [2] => Array
        (
            [namn] => Kök
            [IP] => 192.168.1.134
            [rincon] => RINCON_000E58F8C9E001400
            [rincon_live] => RINCON_000E58A64F1601400
            [slave] => 1
        )

)

如果我有一个 master => true(在这种情况下是 vardagsrum),我希望循环将所有 slave => true rincon_live 值与 master rincon 值匹配。

我不知道这是否有任何意义,但如果我有一个或多个主人,我想检查奴隶 rincon 与主人,看看哪些奴隶连接到哪个主人,然后做一些事情。

感谢您的帮助!

【问题讨论】:

  • 你遇到了什么错误?你能发布你的代码吗?
  • 所有这些项目都存储在数据库中了吗??
  • 我没有使用数据库,它们几乎都是来自构建这个数组的另一个函数的动态。
  • Tomasz:我没有任何东西可以接近我所追求的,在编码方面还很新。

标签: php if-statement for-loop multidimensional-array


【解决方案1】:

您可能需要使用 2 个循环。一个负责构建结构,另一个负责对其进行处理。快速样机(好久没写PHP了):

<?php
$result = array();
foreach ($array as $item) {
    if (!isset($result[$item['rincon']])) {
        $result[$item['rincon']] = array(
            'master' => null,
            'slaves' => array(),
        );
    }
    if (isset($item['master']) && $item['master']) {
        // master
        $result[$item['rincon']]['master'] = $item;
    } else {
        // probably slave, might want to rewrite the else to an elseif
        $result[$item['rincon']]['slaves'][] = $item;
    }
}
?>

现在$result 将包含一个数组,其中 rincon 作为键和主/从,如下所示:

<?php
$result = array(
    'RINCON_000E58A64F1601400' => array(
        'master' => array(
            'namn' => 'foo',
            'IP' => '127.0.0.1',
            ...
        ),
        'slaves' => array(
            array(
                'namn' => 'foo',
                'IP' => '127.0.0.1',
                ...
            ),
            array(
                'namn' => 'bar',
                'IP' => '127.0.0.1',
                ...
            ),
        )
    )
)

我假设你知道如何遍历它

【讨论】:

  • 哇,谢谢,成功了。从来没有想过那样做。
猜你喜欢
  • 2018-04-05
  • 1970-01-01
  • 2012-11-08
  • 2013-04-01
相关资源
最近更新 更多