По моему мнению, чтобы получить наибольшее значение из Set::extract
, было бы лучше начать с массива со структурой, более похожей на следующую (в противном случае я считаю, что вам придется запускать Set::extract
внутри цикла):
$array = array(
'Shipping' => array(
array (
"id" => 4,
"rate" => 82.50,
"pounds" => 2,
"ounces" => 3,
"mailtype" => "Package",
"country" => "UNITED KINGDOM (GREAT BRITAIN)",
"svccommitments" => "1 - 3 business days",
"svcdescription" => "Global Express Guaranteed (GXG)",
"maxdimensions" => 'Max. length 46", width 35", height 46" and max. length plus girth combined 108"',
"maxweight" => 30
),
array (
"id" => 6,
"rate" => 82.50,
"pounds" => 2,
"ounces" => 3,
"mailtype" => "Package",
"country" => "UNITED KINGDOM (GREAT BRITAIN)",
"svccommitments" => "1 - 3 business days",
"svcdescription" => "Global Express Guaranteed Non-Document Rectangular",
"maxdimensions" => 'Max. length 46", width 35", height 46" and max. length plus girth combined 108"',
"maxweight" => 70
)
)
);
Теперь вы можете использовать синтаксис пути для Set::extract()
для извлечения элементов, максимальный вес которых превышает $x
.
$extracted = Set::extract($array, '/Shipping[maxweight>'.$x.']');
С этими данными вы можетесоздайте массив, который вы ищете, используя ставки в качестве ключей и svcdescription в качестве значений, используя Set::combine()
.
$combined = Set::combine($extracted, '{n}.Shipping.rate', '{n}.Shipping.svcdescription');