基于数组中的antoher id排序多数组中的第一项(PHP)

时间:2015-09-18 12:58:32

标签: php arrays

我不知道怎么做到这一点。 请参阅下面的数组。 我在while循环中运行此数组,需要为每个[attach_id]找到第一个[topic_id],并且可以使用在循环中设置的$topic_id ...

正确的输出是:
第一循环:
[attach_id] => 17989(因为这是attach_id)的第一个topic_id 20890

然后
第二循环:
[attach_id] => 17896(因为这是attach_id)的第一个topic_id 20887

但我无法让它发挥作用......

Array ( 
[0] => Array
( 
    [attach_id] => 17989 
    [post_msg_id] => 298566 
    [topic_id] => 20890 
    [extension] => jpg 
    [mimetype] => image/jpeg 
    [filesize] => 142437 
    [filetime] => 1442566541 
    [thumbnail] => 1
)
[1] => Array
( 
    [attach_id] => 17990 
    [post_msg_id] => 298566 
    [topic_id] => 20890 
    [extension] => jpg 
    [mimetype] => image/jpeg 
    [filesize] => 213432 
    [filetime] => 1442566541 
    [thumbnail] => 1
) 
[2] => Array 
(
    [attach_id] => 17991 
    [post_msg_id] => 298566 
    [topic_id] => 20890 
    [extension] => jpg 
    [mimetype] => image/jpeg 
    [filesize] => 63320 
    [filetime] => 1442566541 
    [thumbnail] => 1 
)
[3] => Array
( 
    [attach_id] => 17988 
    [post_msg_id] => 298566 
    [topic_id] => 20890 
    [extension] => jpg 
    [mimetype] => image/jpeg 
    [filesize] => 171560 
    [filetime] => 1442566540 
    [thumbnail] => 1
)
[4] => Array
(
    [attach_id] => 17896 
    [post_msg_id] => 298546 
    [topic_id] => 20887 
    [extension] => jpg 
    [mimetype] => image/jpeg 
    [filesize] => 304056 
    [filetime] => 1441372805 
    [thumbnail] => 1 
) 
[5] => Array
(
    [attach_id] => 17895 
    [post_msg_id] => 298546 
    [topic_id] => 20887  
    [extension] => jpg 
    [mimetype] => image/jpeg 
    [filesize] => 125938 
    [filetime] => 1441372804 
    [thumbnail] => 1
)
[6] => Array 
(
    [attach_id] => 17894 
    [post_msg_id] => 298546 
    [topic_id] => 20887 
    [extension] => jpg 
    [mimetype] => image/jpeg 
    [filesize] => 328378 
    [filetime] => 1441372785 
    [thumbnail] => 1 
)

3 个答案:

答案 0 :(得分:1)

<?php
$attachTopicId = array();
foreach($array as $subArray) {
    if (array_key_exists($subArray["topic_id"], $attachTopicId)) {
        if ($attachTopicId[$subArray["topic_id"]] < $subArray["attach_id"]) {
            $attachTopicId[$subArray["topic_id"]] = $subArray["attach_id"];
        }
    }
    else {
        $attachTopicId[$subArray["topic_id"]] = $subArray["attach_id"];
    }
}

// test output 
if (count($attachTopicId) > 0) {
    foreach($attachTopicId as $key => $value) {
        print sprintf("Topic ID: %s Attach ID: %s", $key, $value);
    }
}

答案 1 :(得分:0)

malloc()

这应该有效

答案 2 :(得分:0)

因为我不知道你的预期结果究竟是什么,所以有两种可能性:

$myArray = array (
    array (
        "attach_id" => 17989,
        "post_msg_id" => 298566,
        "topic_id" => 20890 ,
        "extension" => "jpg",
        "mimetype" => "image/jpeg",
        "filesize" => 142437,
        "filetime" => 1442566541,
        "filetime" => 1,
    ),
    array(
        "attach_id" => 17990,
        "post_msg_id" => 298566,
        "topic_id" => 20890,
        "extension" => "jpg",
        "mimetype" => "image/jpeg",
        "filesize" => 213432,
        "filetime" => 1442566541,
        "filetime" => 1,
    ),
    array (
        "attach_id" => 17991,
        "post_msg_id" => 298566,
        "topic_id" => 20890,
        "extension" => "jpg",
        "mimetype" => "image/jpeg",
        "filesize" => 63320,
        "filetime" => 1442566541,
        "filetime" => 1,
    ),
    array(
        "attach_id" => 17988,
        "post_msg_id" => 298566,
        "topic_id" => 20890,
        "extension" => "jpg",
        "mimetype" => "image/jpeg",
        "filesize" => 171560,
        "filetime" => 1442566540,
        "filetime" => 1,
    ),
    array(
        "attach_id" => 17896,
        "post_msg_id" => 298546,
        "topic_id" => 20887,
        "extension" => "jpg",
        "mimetype" => "image/jpeg",
        "filesize" => 304056,
        "filetime" => 1441372805,
        "filetime" => 1,
    ),
    array (
        "attach_id" => 17895,
        "post_msg_id" => 298546,
        "topic_id" => 20887,
        "extension" => "jpg",
        "mimetype" => "image/jpeg",
        "filesize" => 125938,
        "filetime" => 1441372804,
        "filetime" => 1,
    ),
    array(
        "attach_id" => 17894,
        "post_msg_id" => 298546,
        "topic_id" => 20887,
        "extension" => "jpg",
        "mimetype" => "image/jpeg",
        "filesize" => 328378,
        "filetime" => 1441372785,
        "filetime" => 1,
    )
);

$firstResultArray = array();

// creates a new array with two keys => topic_id and attach_id
foreach( $myArray as $array ) {
    if( isset( $firstResultArray[ $array["topic_id"] ] ) ) continue;
    $firstResultArray[ $array["topic_id"] ] = array( "attach_id" => $array["attach_id"], "topic_id" => $array["topic_id"] );
}
// re-index array
$firstResultArray = array_values( $firstResultArray );

// create new array with topic_id as index and attach_id as value
$secondResultArray = array();
foreach( $myArray as $array ) {
    if( isset( $secondResultArray[ $array["topic_id"] ] ) ) continue;
    $secondResultArray[ $array["topic_id"] ] = $array["attach_id"];
}

echo "<pre>";
var_dump( $firstResultArray );

var_dump( $secondResultArray );

输出:

// first version
array(2) {
  [0]=>
  array(2) {
    ["attach_id"]=>
    int(17989)
    ["topic_id"]=>
    int(20890)
  }
  [1]=>
  array(2) {
    ["attach_id"]=>
    int(17896)
    ["topic_id"]=>
    int(20887)
  }
}


//second version
array(2) {
  [20890]=>
  int(17989)
  [20887]=>
  int(17896)
}