php搜索数组,其中包含“key:value”项

时间:2011-06-07 07:28:04

标签: php arrays

如果我有一个类似于此的数组$输出,我如何搜索数组并回显持续时间值,在这种情况下为30.持续时间并不总是关键[18]。

Array
(
    [16] =>     hasKeyframes    : true
    [17] =>     hasMetadata     : true
    [18] =>     duration        : 30
    [19] =>     audiosamplerate : 22000
    [20] =>     audiodatarate   : 68
    [21] =>     datasize        : 1103197
}

5 个答案:

答案 0 :(得分:5)

尝试此功能:

function search_value($array, $key, $default_value = false)
{
   foreach( $array as $value)
   {
      list($_key, $_val) = array_map('trim', explode(":", $value) );
      if( strtolower($key) == strtolower($_key) )
         return $_val;
   }
   return $default_value;
}

像这样使用

echo search_value( $output, 'duration', 0);

但是,就像@Lawrence指出的那样,如果你改变你的数组结构,它会更容易很多

$output= array(
  'hasKeyframes'=>true,
  'hasMetadata'=>true,
  'duration'=>'30',
  .
  .
  .
);

这样,您只需检查密钥是否存在并获取该值:

echo (!array_key_exists('duration', $output) ? $output['duration'] : 0);

答案 1 :(得分:2)

我建议首先清理数组:

$sanitized = array();

foreach($output as $value) {
    $data = explode(':', $value);
    $sanitized[trim($data[0])] = trim($data[1]);
}

echo $sanitized['duration'];

答案 2 :(得分:2)

  

你不能把它变成关联数组吗?

当然可以:

<?php
$output = array(
    16 => 'hasKeyframes    : true',
    17 => 'hasMetadata     : true',
    18 => 'duration        : 30',
    19 => 'audiosamplerate : 22000'
    20 => 'audiodatarate   : 68',
    21 => 'datasize        : 1103197'
);

foreach( $output as $element ) {
    $values = array_map( 'trim', explode( ':', $element ) );
    $assoc[$values[0]] = $values[1];
}


echo isset( $assoc['duration'] ) ? $assoc['duration'] : 'Duration not set.';

答案 3 :(得分:1)

$array=preg_grep("/duration/", $output);
$array=implode(",",$array);
$key_value=explode(":",$array);
echo $key_value[1];

答案 4 :(得分:0)

你不能把它变成关联数组吗?

Array
(
    [hasKeyframes] =>    true
    [hasMetadata] =>     true
    [duration] =>        30
    [audiosamplerate] => 22000
    [audiodatarate] =>   68
    [datasize] =>        1103197
}

然后它会很简单$arr['duration']

如果没有,您可以解析值,例如同时以无声方式发布。