PHP数组:按索引获取值,其中

PHP数组:按索引获取值,其中,php,arrays,Php,Arrays,我有一个PHP数组: $statuses = array( 'delivery-ongoing' => array("status" => "at-10", "traffic" => "FCL", "type" => "export"), 'delivered' => array("status" => "at-13", "traffic" => "FCL", "type" => "export"), 'delivery-ongoing

我有一个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")
);
我必须按键“正在交付”选择状态,其中type=“导入”

我可以使用数组结构,因为它在我的类中是一个常量

我试过了

$statuses['delivery-ongoing']['status']
如何获得type=“import”的正确状态

是否有某种循环我必须做,或者有另一种方法来做?

您可以使用

此外,正如评论中所建议的,您可以重新命名密钥,可能是在状态后附加一个ID

情商:

你可以用

此外,正如评论中所建议的,您可以重新命名密钥,可能是在状态后附加一个ID

情商:


此阵列存在几个问题:

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。

此数组有几个问题:

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处可用。

您的$status必须具有以下结构:

$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);

您的$状态必须具有以下结构:

$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);

使用foreach循环,然后在$value['type']字段中使用if语句考虑重新构造数组。数组中不能有两个相同的键。钥匙
正在传送
出现两次。@Janne Klouman:这是我的问题。我知道。这就是为什么我有与众不同的类型。或者我可以这样做:delivery Continuous import和delivery Continuous exportYou不应该多次使用同一个键,因为“如果数组声明中的多个元素使用同一个键,那么在覆盖所有其他元素时,将只使用最后一个键。”表单。使用foreach循环,然后如果语句$value['type']请考虑重新构造阵列。数组中不能有两个相同的键。钥匙
正在传送
出现两次。@Janne Klouman:这是我的问题。我知道。这就是为什么我有与众不同的类型。或者我可以这样做:delivery Continuous import和delivery Continuous exportYou不应该多次使用同一个键,因为“如果数组声明中的多个元素使用同一个键,那么只有最后一个元素会被使用,因为所有其他元素都会被覆盖。”数组过滤器标志是在PHP版本5.6+中引入的,我将把我的密钥重命名为唯一的。感谢PHP版本5.6+中引入了数组过滤器标志,我将把我的密钥重命名为唯一的。谢谢那是个打字错误。谢谢。那是个打字错误。谢谢。那很有用。谢谢。那很有用。谢谢