【问题标题】:PHP How to search multidimensional array for a key from another multidimensional array remembering parent keyPHP如何从另一个多维数组中搜索多维数组中的一个键,记住父键
【发布时间】:2014-11-27 04:41:08
【问题描述】:

我也在尝试在匹配父键的同时在多维数组中查找键的值。

例如:

Array 1 - 我正在尝试查找其值的键数组。

$array1 = array(
    'title',
    'metadata' => array('size', 'mime'),
    'dates' => array('published' => 
                    array('firstedition' => '12/22/22', 
                        'secondedition' => '22/22/22', 
                        'thirdedition'),
    'description',
    'mime'
 );

数组 2:我在数组 1 中搜索键的数组

$array2 = array(
    'title' => 'hello',
    'metadata' => array('size' => '22', 'mime' => 'text/html'),
    'dates' => array('published' => 
                    array('firstedition' => '12/22/22', 
                        'secondedition' => '22/22/22', 
                        'thirdedition' => '22/22/14'),
    'type' => 'book',
    'description' => 'This is a description',
    'mime' => 'something/pdf',
    'firstedition' => '99/99/99'
 );

数组 1 中的所有值都是我想在数组 2 中找到的键。如果数组 1 中的值是一个数组,我想在数组 2 中分别找到父值的值。

例如:

数组 1: 元数据 -> 大小

在数组 2 上搜索返回: 22


数组 1: 元数据 -> Mime

在数组 2 上搜索返回: 文本/html


数组 1: 哑剧

在数组 2 上搜索返回: 东西/pdft


数组 1: 日期 -> 出版 -> 第一版

数组 2 返回:

12/22/22

数组 1: 第一版

数组 2 返回: 99/99/99

请注意“日期 -> 已发布 -> 第一个版本”和“第一个版本”之间的输出差异。所以我想搜索数组 1 中的所有值作为在数组 2 中查找的键并将它们显示为:

key -> possiblesubkey -> possiblesubkey : 值

如果可能的话,返回一个带有键和值路径的数组,例如:

    array('dates\published\firstedition', '12/22/22');
    array('firstedition', '99/99/99');

另外,Array1 是一个更大数组的一部分,具有不同的文件类型,array1 在键“books”下,而在 array2 中是键“type”,因此取决于什么类型 array2 是键中的值我想在array2 中可能会有所不同。例如,在 array1 中可能还有“歌曲”,我想要一组不同的值,例如“比特率”,但我不想寻找“第一版”,因为它不存在。

我已经发布了这个示例,因为我已经设法识别 array2 是什么类型并找到输出我发布为 array1 的相应键。

任何帮助将不胜感激我似乎无法解决这个问题。

【问题讨论】:

  • 当你设置array1时知道值是什么,你需要array2中的键,你需要array1吗?你不能用你知道你想要的键/值来访问(或foreach())array2 吗?
  • 你能举个例子吗?此外,Array1 是更大数组的一部分,具有不同的文件类型,array1 在键“books”下,在 array2 中是键“type”,所以取决于什么类型 array2 是我想要的键中的值array2 可能不同。例如,在 array1 中可能还有“歌曲”,我想要一组不同的值,例如“比特率”,但我不想寻找“第一版”,因为它不存在。我更新了我的问题以获得更多理解。

标签: php arrays search multidimensional-array


【解决方案1】:

我设法通过使用此函数将数组压缩到路径来完成此操作:

public static function convertToPaths($myArray)
{
    $ritit = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray));
    $result = array();
    foreach ($ritit as $leafValue) {
        $keys = array();
        foreach (range(0, $ritit->getDepth()) as $depth) {
            $keys[] = $ritit->getSubIterator($depth)->key();
        }
        $result[ join('.', $keys) ] = $leafValue;
    }
    return $result;
}

它返回数组和值作为路径,例如“dates.published.firstedition” - 然后我能够访问信息并使用 in array 函数检查它是否存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多