【问题标题】:PHP array_search in multidimensional array by variablePHP array_search通过变量在多维数组中
【发布时间】:2018-12-25 15:48:03
【问题描述】:

我有一个数组,我想在其中过滤掉有关 OrderId 的所有信息。因此,我想通过一个包含我的 OrderId 的变量来数组搜索我的数组。 这样我就可以获取数组键,然后用array_slice对数组进行切片。

Array
( 
    [Order] => Array
        ( 
            [0] => Array
                ( 
                    [OrderId] => 4832413060 
                    [DateTimeCustomer] => 2018-07-17T12:55:07.000+02:00 
                    [DateTimeDropShipper] => 2018-07-17T12:55:07.000+02:00 
                    [CustomerDetails] => Array 
                        ( 
                            [ShipmentDetails] => Array 
                                ( 
                                    [SalutationCode] => 01 
                                    [Firstname] => name 
                                    [Surname] => sirname 
                                    [Streetname] => streetname 
                                    [Housenumber] => number 
                                    [ZipCode] => zipcode 
                                    [City] => city 
                                    [CountryCode] => countryCode
                                    [Email] => email 
                                ) 
                            [BillingDetails] => Array 
                                ( 
                                    [SalutationCode] => 01 
                                    [Firstname] => name
                                    [Surname] => sirname
                                    [Streetname] => streetname 
                                            [Housenumber] => number 
                                    [ZipCode] => zipcode 
                                    [City] => city 
                                    [CountryCode] => countryCode 
                                    [Email] => email
                                ) 
                        ) 
                    [OrderItems] => Array
                        ( 
                            [OrderItem] => Array 
                                ( 
                                    [OrderItemId] => orderitemid 
                                    [OfferReference] => Array 
                                        ( 

                                        ) 
                                    [EAN] => ean 
                                    [Title] => title 
                                    [Quantity] => 1 
                                    [OfferPrice] => 14.95 
                                    [TransactionFee] => 3.24 
                                    [LatestDeliveryDate] => 2018-07-18+02:00 
                                )
                        )
                ) 
            [1] => Array
                ( 
                    [OrderId] => 4832413070
                    [DateTimeCustomer] => 2018-07-17T12:55:07.000+02:00 
                    [DateTimeDropShipper] => 2018-07-17T12:55:07.000+02:00 
                    [CustomerDetails] => Array 
                        ( 
                            [ShipmentDetails] => Array 
                                ( 
                                    [SalutationCode] => 01 
                                    [Firstname] => name 
                                    [Surname] => sirname 
                                    [Streetname] => streetname 
                                    [Housenumber] => number 
                                    [ZipCode] => zipcode 
                                    [City] => city 
                                    [CountryCode] => countryCode
                                    [Email] => email 
                                ) 
                            [BillingDetails] => Array 
                                ( 
                                    [SalutationCode] => 01 
                                    [Firstname] => name
                                    [Surname] => sirname
                                    [Streetname] => streetname 
                                    [Housenumber] => number 
                                    [ZipCode] => zipcode 
                                    [City] => city 
                                    [CountryCode] => countryCode 
                                    [Email] => email
                                ) 
                        ) 
                    [OrderItems] => Array
                        ( 
                            [OrderItem] => Array 
                                ( 
                                    [OrderItemId] => orderitemid 
                                    [OfferReference] => Array 
                                        ( 

                                        ) 
                                    [EAN] => ean 
                                    [Title] => title 
                                    [Quantity] => 1 
                                    [OfferPrice] => 14.95 
                                    [TransactionFee] => 3.24 
                                    [LatestDeliveryDate] => 2018-07-18+02:00 
                                )
                        )
                ) 

我试过的代码:

foreach ($items as $item) {
$key = array_search($item, $array1);

$item 与 OrderId 相同。

我尝试了许多来自互联网的不同示例,但不幸的是,似乎没有什么对我有用。

【问题讨论】:

  • 由于格式问题,我看不到您的数组。您能否编辑问题并使其更具可读性以便我们提供帮助?
  • 尝试类似foreach ($items['Order'] as $index => $item) { 然后$item['OrderId'] 将是你想要的数据,所以用它来检查任何东西(不确定我是否理解你检查它的内容,或者$array1 是什么)跨度>
  • 你能否对数组进行json_encode并发布,以便我们可以使用数组数据
  • 所有 orderid 都是唯一的吗?还是可以再次出现相同的orderid?
  • OP 走了 wim salabim 并消失了吗?

标签: php arrays search multidimensional-array


【解决方案1】:

我认为您可以使用 array_column 使数组与 orderid 作为键关联,从而很容易找到 orderid。
但这假设您在数组中只有唯一的 orderid。

$find = 4832413060;
$arr = array_column($arr, NULL, 'orderid');

$findOrder = $arr[$find];

Var_dump($findOrder);

我做了一个小数组来演示代码。
https://3v4l.org/jEus3

【讨论】:

  • 不幸的是,这不起作用。我得到“NULL”作为响应。
  • @WimSalabim 可能有两个原因。 1 数组中不存在 orderid。 2 您错误地实现了代码。由于您没有以我们可以使用的方式包含数组,因此我无法在真实数据上测试代码。如果您包含 json 格式的数组,那么我可以在真实数据上对其进行测试。但我看不出我的示例数组有何不同足以产生影响。
【解决方案2】:

array_search() 不适用于多维数组。使用array_filter()

foreach ($items as $item) {
    $found = array_filter($array, function($element) use($item) {
        return $element['OrderId'] == $item;
    }
    // $found now contains all the elements in the original array for $item
    ...
}

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2016-03-02
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多