PHP array_diff的问题

时间:2013-12-29 20:35:25

标签: php arrays wordpress

我们将很多照片上传到WordPress。我们不会全部使用它们。未使用的那些保持“附加”到它不在其中的帖子,这使得很难返回并删除它。

我已经构建了2个数组。一个数组包含帖子内容($postImages)中的所有图像。另一个数组包含WordPress数据库附加到帖子($mediaImages)的所有图像。

我正在尝试识别哪些图像出现在数据库中,但不在帖子中。这样我就可以从数据库中分离图像了。

我正在使用array_diff来比较两个数组,但它并没有显示奇怪的人。它似乎显示了比赛。

这是我的阵列:

调用此$postImages

var_dump($postImages);

array(3) {
  [2]=>
  string(64) "http://mywebsite.com/wp-content/uploads/2013/11/photoblog1.jpg"
  [0]=>
  string(64) "http://mywebsite.com/wp-content/uploads/2013/11/photoblog2.jpg"
  [1]=>
  string(64) "http://mywebsite.com/wp-content/uploads/2013/11/photoblog3.jpg"
}

$mediaImages

var_dump($mediaImages);

array(4) {
  [1]=>
  array(1) {
    [0]=>
    string(64) "http://mywebsite.com/wp-content/uploads/2013/11/photoblog1.jpg"
  }
  [2]=>
  array(1) {
    [0]=>
    string(64) "http://mywebsite.com/wp-content/uploads/2013/11/photoblog2.jpg"
  }
  [0]=>
  array(1) {
    [0]=>
    string(64) "http://mywebsite.com/wp-content/uploads/2013/11/photoblog3.jpg"
  }
  [3]=>
  array(1) {
    [0]=>
    string(62) "http://mywebsite.com/wp-content/uploads/2013/12/IMG_0069.jpg"
  }
}

这是输出:

$matches = array_diff($postImages, $mediaImages);
print_r($matches);

Array
(
    [2] => http://mywebsite.com/wp-content/uploads/2013/11/photoblog1.jpg
    [0] => http://mywebsite.com/wp-content/uploads/2013/11/photoblog2.jpg
    [1] => http://mywebsite.com/wp-content/uploads/2013/11/photoblog3.jpg
)

预期产出:

Array
(
    [0] => http://mywebsite.com/wp-content/uploads/2013/12/IMG_0069.jpg
)

1 个答案:

答案 0 :(得分:1)

正如Marc B在评论中指出的那样,$mediaImages是一个字符串数组数组,而$postimages只是一个字符串数组。

您可以将array_map()与自定义回调一起使用来创建$mediaImages数组:

$mediaImages = array_map(function($item) { 
    return $item[0]; 
}, $mediaImages);

另请注意,您有array_diff()的参数向后。正确的顺序是:

array_diff($arrayToCompareFrom , $arrayToCompareAgainst);

因此,要将$postImages$mediaImages进行比较,您需要:

$matches = array_diff($mediaImages, $postImages);
print_r($matches);

Demo.