PHP ARRAY搜索键并应用操作

时间:2011-02-14 15:38:02

标签: php arrays

我有一个包含这样的值的数组

请参阅下面的脚本示例

假设这是一个变量$ Output_Data

我想在下面列出的$ Output_Data上应用某些功能

  1. 删除重复值,同时关联KEY(但必须保留一个)
    我知道这可以通过函数array_unique来实现,但是如何删除数组键
  2. 如果存在img,则将其添加到添加img标记示例

    的变量中
    if exist img key in output data (or flv or mp4)
        $output_img[] = '<a href="$Output_Data[img]">Image "$i"</a>';
    

    对于每一把钥匙都是这样的,我的意思是FLV,MP4,IMG

  3. 输出到用户界面现在我们再次创建了新的数据分隔数据

    $output_img[] 
    $output_flv[] 
    $output_mp4[]
    
  4. 因此,如果数组包含数据而不是输出到用户屏幕...(这里也检查它们是否存在或是空的)

    我不是这方面的专业人士我只是想在我的网站上添加一个功能而且我很讨厌数组,但它是唯一可以帮助我的东西。

    你也可以为此提一个替代解决方案...因为这只是我的想法而不是必要性。

    对不起,这里的错误代码是一个示例脚本

    function sortoutput($data_to_sort,$key_explode_char) {   
     $output_content = array();
        foreach (explode(PHP_EOL, $data_to_sort) as $cLine) { 
            list ($cKey, $cValue) = explode($key_explode_char, $cLine, 2); 
            $output_content[$cKey] = $cValue;
        }
        return $output_content;
        }
                        ob_start();
                                $flv = 'http://example.com/example.flv';
                                $flv2 = 'http://example.com/example2.flv';
                                 $img = 'http://example.com/my.jpg';
                                $mp4 = 'http://example.com/okay.mp4';
                                print 'flv=`'.$flv.PHP_EOL;
                                print 'flv=`'.$flv2.PHP_EOL;
                                print 'img=`'.$img.PHP_EOL;
                                print 'mp4=`'.$mp4;
                                $Output_Download_Link = ob_get_contents();
                                 ob_end_clean();
    
    
                                echo $Output_Download_Link;
                                $Sorted_Output_Links = sortoutput($Output_Download_Link, '=`');
    
                                 echo '<pre>';
                                print_r($Sorted_Output_Links);
                                echo '</pre>';
    

1 个答案:

答案 0 :(得分:1)

您必须切换键和值。钥匙永远是独一无二的!您不能拥有两个或多个具有相同键名的条目(使用二维数组除外......)。

在此之后,您可以使用array_keys()获取数组的键并使用array_unique()

$array = array('url1' => 'flv', 'url2' => 'flv', 'url3' => 'png');
$keys = array_keys($array); //all urls
$keys = array_unique($keys); //remove url duplicates
$output = array( //all extensions which should be stored in array
    'flv' => array(),
    'png' => array(),
    'mp4' => array(),
);

foreach($keys as $url) {
    $extension = $array[$url];
    if(isset($output[$extension])) {
        $id = count($output[$extension]) + 1;
        $output[$extension][] = "<a href=\"".$url."\">Image #".$id."</a>";
    }
}

foreach($output as $o) {
    //Output all arrays which aren't empty
    if(!empty($o)) {
        $o = implode('', $o);
        echo $o.'<hr />';
    }
}

更好的方法是使用substr()和strrpos()直接从链接获得扩展名。

你可以检查$ output [$ extension]是否存在并在$ output [$ extension]上创建一个空数组()。通过这种方式,您可以更灵活地使用扩展程序......

修改:添加了正确的示例...

你必须改变这一行:$ output_content [$ cKey] = $ cValue;

//OLD: $output_content[$cKey] = $cValue;
//NEW:
if(!isset($output_content[$cKey])) {
    $output_content[$cKey] = array();
}
$output_content[$cKey][] = "<a href=\"".$cValue."\">".$cValue."</a>";

然后你可以检查$ output_content的每个条目是否为空并输出它。 (看看我上面的第一个例子)