我不知道怎么做到这一点。
请参阅下面的数组。
我在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
)
)
答案 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)
}