簡體   English   中英

PHP:如何從數組中獲取唯一內容?

[英]PHP: How to get unique content from array?

我有一個數組,我需要唯一的內容。 我如何擺脫這個$ tmparray中的重復

array(176) {
  [0]=>
  array(2) {
    [0]=>
    string(22) "/ads/67006/didi"
    [1]=>
    string(73) "/Content/Pictures/Scaled/7b5c69572fdb1569ced695c278072ae0.jpg"
  }
  [1]=>
  array(2) {
    [0]=>
    string(22) "/ads/67006/didi"
    [1]=>
    string(73) "/Content/Pictures/Scaled/7b5c69572fdb1569ced695c278072ae0.jpg"
  }
  [2]=>
  array(2) {
    [0]=>
    string(22) "/ads/67006/didi"
    [1]=>
    string(73) "/Content/Pictures/Scaled/7b5c69572fdb1569ced695c278072ae0.jpg"
  }
  [3]=>
  array(2) {
    [0]=>
    string(19) "/ads/67010/sylvesta"
    [1]=>
    string(73) "/Content/Pictures/Scaled/83ebba04b8eabd0458cc6dbbb85581da.jpg"
  }
  [4]=>
  array(2) {
    [0]=>
    string(19) "/ads/67010/sylvesta"
    [1]=>
    string(73) "/Content/Pictures/Scaled/83ebba04b8eabd0458cc6dbbb85581da.jpg"
  }
  [5]=>
  array(2) {
    [0]=>
    string(19) "/ads/67010/sylvesta"
    [1]=>
    string(73) "/Content/Pictures/Scaled/83ebba04b8eabd0458cc6dbbb85581da.jpg"
  }

但我希望它看起來像:(僅獨特的內容。)

array(176) {
  [0]=>
  array(2) {
    [0]=>
    string(22) "/ads/67006/didi"
    [1]=>
    string(73) "/Content/Pictures/Scaled/7b5c69572fdb1569ced695c278072ae0.jpg"
  }
  [1]=>
  array(2) {
    [0]=>
    string(19) "/ads/67010/sylvesta"
    [1]=>
    string(73) "/Content/Pictures/Scaled/83ebba04b8eabd0458cc6dbbb85581da.jpg"
  }
  }

我嘗試過:

array_unique($tmparray);

array_unique不能做我想要的。 有人知道如何解決這個問題嗎?

您的問題似乎與此重復
如何從PHP中的多維數組中刪除重復的值

我想array_map將解決您的問題

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

您可以使用以下代碼:

$newarray= array();
foreach ($tmparray as $value) {
    if (!in_array($value,$newarray)) {
        $newarray[ ] = $value;
    }
}
var_dump($newarray);

我假設重復是指兩個元素匹配的兩項,因為您正在將廣告映射到它們的圖片,因此:

$target = array();
$elementCount = count($tmparray);
$newElementCount = 0;
for ($i = 0; $i < $elementCount; $i++) {
    $found = false;
    for ($j = 0; (!$found) && (j < $newElementCount); j++) {
        $found = $target[$j][0] === $tmparray[$i][0] || $target[$j][1] === $tmparray[$i][1];
    }
    if (!$found) {
        $target[$newElementCount++]=$tmparray[$i];
    }
}

PHP array_unique僅用於一維數組,對於多維,可以通過序列化多維數組來實現,如下所示

<?php 
$dataArray = [
                0=>["/ads/67006/didi","/Content/Pictures/Scaled/7b5c69572fdb1569ced695c278072ae0.jpg"],
                1=>["/ads/67010/sylvesta","/Content/Pictures/Scaled/83ebba04b8eabd0458cc6dbbb85581da.jpg"],
                2=>["/ads/67006/didi","/Content/Pictures/Scaled/7b5c69572fdb1569ced695c278072ae0.jpg"],
                3=>["/ads/67010/sylvesta","/Content/Pictures/Scaled/83ebba04b8eabd0458cc6dbbb85581da.jpg"],
             ];
$serilaized = [];
$newArr = [];
### serilaize each node of multi array and create a new single dimention array..         
foreach($dataArray as $val){
    $serilaized[] = serialize($val); 
}
### now perform array unique..
$serilaized_unique = array_unique($serilaized);
## unserialize each node of uniqur array..
foreach($serilaized_unique as $val){
    $newArr[] = unserialize($val);
}
echo "<pre>";print_r($newArr);
?>

這將為您提供:

Array
(
    [0] => Array
        (
            [0] => /ads/67006/didi
            [1] => /Content/Pictures/Scaled/7b5c69572fdb1569ced695c278072ae0.jpg
        )

    [1] => Array
        (
            [0] => /ads/67010/sylvesta
            [1] => /Content/Pictures/Scaled/83ebba04b8eabd0458cc6dbbb85581da.jpg
        )

)

簡而言之,您可以使用array_map在單行代碼中執行此array_map

$dataArray = array_map('unserialize', array_unique(array_map('serialize', $dataArray)));

我在這條線上工作:

$tmparray = array_unique($tmparray, SORT_REGULAR);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM