2012-05-02 86 views
20

Tôi đã thực hiện rất nhiều việc tìm kiếm xung đột, và trên google, nhưng không có kết quả nào phù hợp với trường hợp cụ thể của tôi.Cách lấy giá trị duy nhất trong mảng đa chiều

Tôi có một mảng giữ chỗ gọi là $ giữ, giá trị như sau:

Array ( 
    [0] => Array ( 
     [id] => 1 
     [pid] => 121 
     [uuid] => 1 
     ) 
    [1] => Array ( 
     [id] => 2 
     [pid] => 13 
     [uuid] => 1 
     ) 
    [2] => Array ( 
     [id] => 5 
     [pid] => 121 
     [uuid] => 1 
     ) 
    ) 

Tôi cố gắng để kéo ra riêng biệt/giá trị duy nhất từ ​​mảng đa chiều này. Kết quả cuối cùng tôi muốn là một trong hai một biến chứa (13.121), hoặc (tốt) một mảng như sau: Array ( [0] => 13 [1] => 121 )

Một lần nữa tôi đã thử serializing và như vậy, nhưng không hoàn toàn hiểu làm thế nào mà hoạt động khi hoạt động với một phím duy nhất trong mỗi mảng.

Tôi đã cố gắng rõ ràng nhất có thể. Tôi hy vọng nó có ý nghĩa ...

+0

có thể lặp lại [PHP loại bỏ giá trị trùng lặp khỏi mảng đa chiều] (http: // stackoverflow.com/questions/3598298/php-remove-duplicate-values-from-multidimensional-array) – nu6A

Trả lời

43

vẻ khá đơn giản: trích xuất tất cả pid giá trị vào mảng riêng của họ, chạy nó thông qua array_unique:

$uniquePids = array_unique(array_map(function ($i) { return $i['pid']; }, $holder)); 

Các điều tương tự trong longhand:

$pids = array(); 
foreach ($holder as $h) { 
    $pids[] = $h['pid']; 
} 
$uniquePids = array_unique($pids); 
+1

Tôi tự hỏi tại sao điều này không hoạt động 'array_unique (mảng_map (hàm ($ i) {return $ i [$ id]; }, $ holder)); 'Có cách nào để sử dụng biến thay vì tên khóa được xác định trước không? –

+0

@Ilia Xem http://stackoverflow.com/a/16959577/476 – deceze

+0

@deceze Ah, được rồi, nó nằm trong chức năng ẩn danh. Cảm ơn! –

2

hãy thử điều này

foreach($arr as $key => $val) { 
    $new_arr[] = $val['pid']; 
} 
$uniq_arr = array_unique($new_arr); 
2

Chỉ cần lặp lại qua và áp dụng array_unique vào kết quả:

foreach($holder as $yourValues){ 
    $pids[] = $yourValues['pid']; 
} 
$yourUniquePids = array_unique($pids); 
0

Hi Hãy thử mã đưa ra dưới đây để có được giá trị duy nhất và sau đó sắp xếp rằng giá trị

<?php 

$sort_arr = unique_sort($holder, 'pid'); 
echo "<pre>"; 
print_r($sort_arr); 
echo"</pre>"; 

/*function for get unique value then sort them*/ 

function unique_sort($arrs, $id) { 
    $unique_arr = array(); 
    foreach ($arrs AS $arr) { 

     if (!in_array($arr[$id], $unique_arr)) { 
      $unique_arr[] = $arr[$id]; 
     } 
    } 
    sort($unique_arr); 
    return $unique_arr; 
} 

nhờ

1

Giả sử mảng của bạn được gọi là $ giữ:

$unique = array(); 
foreach($holder as $h) 
    if(! in_array($h, $unique)) 
     $unique[] = $h; 

là một cách hiệu quả hơn một chút so với mảng_unique, tôi tin. Có thể giống nhau.

+0

'in_array' về bản chất là lặp đi lặp lại trên mảng một lần nữa và một lần nữa, vì vậy bạn đã có hai vòng lồng nhau. Điều đó không hiệu quả theo cách riêng của nó. – deceze

14

Trong php> = 5,5 bạn có thể sử dụng array_column:

array_unique(array_column($holder, 'pid')); 
+0

Tôi nghĩ rằng đó là cách tốt nhất để làm điều đó. –

-1

fo hoàn cảnh của tôi tôi sử dụng phương pháp này

//get some data from db to array 
while ($row = mysqli_fetch_assoc($query)){ 
    $data[] = $row; 
} 

//display unique value 
echo "<table>"; 
$uniq = array(); 
foreach ($data as $row) { 
    if(!in_array($row['path'], $uniq)) { 
     $uniq[] = $row['path']; 
     echo "<tr>"; 
     echo "<td>"; 
     echo $row['path']; 
     echo "</td>"; 
     echo "<td>"; 
     echo $row['relationship_id']; 
     echo "</td>"; 
     echo "</tr>"; 
    } 
} 
echo "</table>"; 
+0

Tôi không thấy câu trả lời cho câu hỏi như thế nào: đó là nhận giá trị duy nhất trong một mảng đa chiều – goto

Các vấn đề liên quan