2010-06-21 1 views
2

У меня есть следующий массив:Создать массив с Set Extract в CakePHP с условиями

Array 
(
    [0] => 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 
     ) 

    [1] => 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 
     ) 

И я хочу использовать набор CakePHP в: экстракте инструменты для фильтрации этого массива на «maxweight», так что все элементы, которые имеют а «maxweight» больше, чем X и получить массив составлен из «скорости» и «svcdescription» поля, то есть:

Array (
[82.50] => Global Express Guaranteed Non-Document Rectangular 
... 
etc 
) 

Является ли это вообще возможно?

ответ

0

Я никогда не использовал это раньше, но спасибо, что побудил меня прочитать его. Вы пытались использовать Set :: comb()?

http://book.cakephp.org/view/662/combine

+0

Спасибо! Я фактически использую это, чтобы решить проблему сейчас. – Leo

0

Почему вы не можете просто использовать цикл Еогеасп для обработки через массив.

$returnArray = array(); 

// Where $x is weight amount you're testing against 
foreach ($yourData as $eachData) { 
    if ($eachData['maxweight'] > $x) { 
     $returnArray[$eachData['rate']] = $eachData['svcdescription']; 
    } 
} 
+0

Очевидно, я мог бы, я просто думал, что это можно сделать по-другому. – designvoid

+0

Возможно, есть много способов сделать это. Если бы я мог предложить совет, не поймайте попытку переопределить или потратить слишком много времени, пытаясь найти идеальный инструмент, когда будет достаточно хороший инструмент .... ну .... достаточно хорошо. :) – mikegreenberg

2

На мой взгляд, чтобы получить максимальную отдачу от 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() для извлечения элементов, которые имеют maxweight больше, чем $x.

$extracted = Set::extract($array, '/Shipping[maxweight>'.$x.']'); 

С помощью этих данных, вы можете создать массив, который вы ищете, используя ставки в качестве ключей и svcdescription как значения с помощью Set::combine().

$combined = Set::combine($extracted, '{n}.Shipping.rate', '{n}.Shipping.svcdescription'); 
+0

'Set :: extract' не заботится о« предпочтительных форматах », он просто работает с массивами. – deceze

+0

Да, вы правы. Плохой выбор слов. – stevelove

+0

его полезно, хотя .. tnx много! –

 Смежные вопросы

  • Нет связанных вопросов^_^