如果我有一个类似于此的数组$输出,我如何搜索数组并回显持续时间值,在这种情况下为30.持续时间并不总是关键[18]。
Array
(
[16] => hasKeyframes : true
[17] => hasMetadata : true
[18] => duration : 30
[19] => audiosamplerate : 22000
[20] => audiodatarate : 68
[21] => datasize : 1103197
}
答案 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']
。
如果没有,您可以解析值,例如同时以无声方式发布。