2013-02-19 12 views
5

Yuvalanmış dizinin paketini açmanın akıllı bir yolunu öğrenmek istiyorum. Örneğin, aşağıdaki gibi görünen bir dizi değişken $ rma_data ['status'] var;PHP paket dizisi

[status] => Array 
    (
     [0] => Array 
      (
       [created] => 1233062304107 
       [statusId] => 5 
       [statusName] => Open 
      ) 

     [1] => Array 
      (
       [created] => 1233061910603 
       [statusId] => 2 
       [statusName] => New 
      ) 

     [2] => Array 
      (
       [created] => 1233061910603 
       [statusId] => 1 
       [statusName] => Created 
      ) 

    ) 

ben gibi durumuna göre bir değişkenlere düzenlendi zaman damgaları ve StatusId saklamak istiyorum: biz bulursak dışarı durum, düzenlendi" yerine "Yeni" Aç kullanır ve, mevcut "Açık" var ". Yalnızca Yeni ve Oluşturulmuş ise, bunun yerine Yeni'yi kullanırız. Bunu yapmak için benim yol

Güncel sürüm:

for($i=0; $i<count($rma_data['status']); $i++) 
       { 
        switch($rma_data['status'][$i]['statusId']) 
        { 
         case 5: 

              case 2: 

              case 3: 
       } 

Herhangi bir fikir?

+0

Sıralama, en yüksek almak tane sıralanmış. – deceze

cevap

2

, zaten ne iyi görünüyor.

Tek önerim, örneğin, sayım gibi ek değişkenler kullanmak ve daha verimli ve okunabilir olması için bazı küçük kodları açmaktır. Örneğin

: Bu durum türü, dizinlenmiş diziyi oluşturmak olacaktır yaklaşık

gerçekten statusName bu üç belirli değerlere bağlı ediyorsanız
$total=count($rma_data['status']); 
for($i=0; $i<$total; $i++){ 
    $x=$rma_data['status'][$i]; 
    if($x['statusName']=='Open'){ // Use your criteria 
     $t=$x['created']; 
     //...Do Work 
    } 
} 
+0

Teşekkürler, bir deneyeceğim – QLiu

0

Oldukça gerekli bir koşul anlamıyorum ama bu yardım edecek gibi olabilir: orta ölçekli ve küçük İçin

$searched_status_id = null; 
$searched_timestamp = null; 
foreach ($rma_data['status'] as $id => $status) { 
    if ((!$searched_timestamp && !$searchуd_status_id) || 
     ($status['statusName'] == 'New' || $status['statusName'] == 'Open')) { 
     $searched_timestamp = $status['created']; 
     $searched_status_id = $status['statusId']; 
    } 
    if ($status['statusName'] == 'Open') { 
     break; 
    } 
} 
+0

Üzgünüz, cevabınızı benimkilerden ziyade düzenledim ...! – zaf

1

, daha basit ve anlaşılabilir bir yol gitmek için hangi size daha kolay test edebilir. Örneğin

:

$rma_statuses = array(); 
foreach ((array)$rma_data['status'] as $status) : 
    $rma_statuses[$status['statusName']] = array(
     'created'=>$status['created'], 
     'id'=>$status['statusId'] 
    ); 
endforeach; 

$rma_stauts = $rma_statuses['open'] ?: ($rma_statuses['new'] ?: $rma_statuses['created']); 

// Do something with $rma_stauts['created'] and $rma_stauts['id'] 
0
if(is_array($rma_data['status'])){ 
//assuming there are only three values inside it 
//case1 
$open = ($rma_data['status'][0]['statusName'] == 'Open' || 
      $rma_data['status'][1]['statusName'] == 'Open' || 
      $rma_data['status'][2]['statusName'] == 'Open'); 
//case2 
$new = (!$open && 
     ($rma_data['status'][0]['statusName'] == 'New' || 
      $rma_data['status'][1]['statusName'] == 'New' || 
      $rma_data['status'][2]['statusName'] == 'New')); 
if($open){ 
    echo 'open'; 
}elseif($new){ 
    echo 'New'; 
}else{ 
    echo 'None'; 
} 

} 

İkincisi: Dizi onların durumuna göre

foreach($rma_data['status'] as $key => $val){ 
$statusName = $val['statusName']; 
$newarray[$statusName] = $val; 
} 
echo '<pre>'; 
print_r($newarray); 

if(array_key_exists('Open', $newarray)){ 
$created = $newarray['Open']['created']; 
$statusId = $newarray['Open']['statusId']; 
echo 'Open'; 

} 
elseif(array_key_exists('New', $newarray)){ 
$created = $newarray['New']['created']; 
$statusId = $newarray['New']['statusId']; 
    echo 'New'; 
}else{ 
echo "None"; 
}