簡體   English   中英

PHP數組:通過索引獲取值,其中

[英]PHP arrays: get value by index where

我有這個PHP數組:

$statuses = array(
  'delivery-ongoing' => array("status" => "at-10", "traffic" => "FCL", "type" => "export"),
  'delivered' => array("status" => "at-13", "traffic" => "FCL", "type" => "export"),
  'delivery-ongoing' => array("status" => "00--00", "traffic" => "FCL", "type" => "import"),
  'return-to-ongoing' => array("status" => "to-04", "traffic" => "FCL", "type" => "import"),
  'delivered' => array("status" => "at-13", "traffic" => "FCL", "type" => "import")
);

我必須通過類型為=“ import”的鍵“進行中”選擇狀態

我可以使用數組結構,因為這是我班上的一個常數。

我試過了

$statuses['delivery-ongoing']['status']

如何獲得type =“ import”的正確狀態

我是否需要執行某種循環,或者有另一種方法可以執行此操作?

您可以使用array_filter

$filtered = array_filter($statuses, function($value, $key) {
    return ($key == 'delivery-ongoing' && $value['type'] == 'import');
}, ARRAY_FILTER_USE_BOTH);

print_r($filtered);

另外,正如注釋中所建議的那樣,您可以重命名密鑰,也許是在狀態后附加一個ID。

式:

'delivery-ongoing-101' => array("status" => "at-10", "traffic" => "FCL", "type" => "export"),

這個數組有幾個問題:

1-括號中的錯誤在此行關閉的太早了:

'return-to-ongoing' => array("status" => "to-04", "traffic" => "FCL"), "type" => "import",

2-如果在同一數組上兩次定義相同的鍵,則將無法訪問用該鍵定義的第一個元素。 如果使用調試器,您將看到數組中只有3個元素可用,因為有多個共享同一密鑰,並且僅保存了最后一個。

但是要獲得所需的值,可以使用以下循環:

foreach ($statuses as $key => $value) {

    if($key == 'delivery-ongoing' && $value['type'] == 'import'){

        $result = $value['status'];

        break;
    }
}

循環結束后,類型導入的狀態在$ result可用。

您的$ statuses必須具有以下結構:

$statuses = array(
  'delivery-ongoing' => array(
    array("status" => "at-10", "traffic" => "FCL", "type" => "export"), 
    array("status" => "00--00", "traffic" => "FCL", "type" => "import")
  ),
  'delivered' => array(
    array("status" => "at-13", "traffic" => "FCL", "type" => "export"), 
    array("status" => "at-13", "traffic" => "FCL", "type" => "import")
    ),
  'return-to-ongoing' => array(array("status" => "to-04", "traffic" => "FCL", "type" => "import")),
);

現在,您可以通過執行以下操作來完成您想做的事情:

 function filter_by_value ($array, $index, $value){ 
    if(is_array($array) && count($array)>0)  
    { 
        foreach(array_keys($array) as $key){ 
            $temp[$key] = $array[$key][$index]; 

            if ($temp[$key] == $value){ 
                $newarray[$key] = $array[$key]; 
            } 
        } 
      } 
  return $newarray; 
} 

$imported = filter_by_value($statuses['delivery-ongoing'], 'type', 'import');

print_r($imported);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM