代码之家  ›  专栏  ›  技术社区  ›  user13286

PHP-array_search+带嵌套数组的array_column

  •  0
  • user13286  · 技术社区  · 2 年前

    我有一个数组,它包含一些键和一个额外的嵌套数组。我试图弄清楚如何检查嵌套数组中是否存在特定的值,如果存在,则从父数组中获取另一个值。下面是我的数组示例:

    $products = array(
        array(
            'product_name' => 'My First Product',
            'price' => 50,
            'sizes' => [
                'S',
                'L',
                'XL'
            ]
        ),
        array(
            'product_name' => 'My Second Product',
            'price' => 45,
            'sizes' => [
                'S',
                'M',
                'L',
                'XL'
            ]
        )
    )
    

    在这个例子中,我想搜索数组,看看是否有一个大小为 M 存在,如果存在,则获取 product_name 。我相信我可以用 array_search array_column 但迄今为止都没有成功。

    以下是我的尝试:

    $col = array_search('M', array_column($products, 'sizes'));
    $productName = $products[$col]['product_name'];
    

    这确实给了我一个结果,但它返回 My First Product ,即使该产品没有尺寸 M 。我确信这个问题以前已经得到了答案,但不幸的是,我不太确定我在这里尝试做什么的术语是什么,所以我一直没能找到答案。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Nick SamSmith1986    2 年前

    因为 sizes 是一个数组,您对 array_column 返回一个多维数组,因此 array_search 调用返回 false 当您尝试将字符串与数组进行比较时。

    解决问题的最简单方法可能就是迭代:

    $productNames = array();
    foreach ($products as $product) {
        if (in_array('M', $product['sizes'])) $productNames[] = $product['product_name'];
    }
    print_r($productNames);
    

    示例数据的输出:

    Array
    (
        [0] => My Second Product
    )
    

    上的演示 3v4l.org