[英]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.