【问题标题】:PHP - Compare 2 multidimensional arrays and output values if equal fields in arrayPHP - 如果数组中的字段相等,则比较 2 个多维数组和输出值
【发布时间】:2012-11-19 17:48:32
【问题描述】:

我在 2 个变量中有 2 个数组,并且它们都在字段中包含完全相同的值(第一个数组 =“image_id”-field 和第二个数组 =“ID-field”)。

我需要比较这 2 个字段并想输出第一个数组的图像路径字符串(如果第一个数组的“ID”字段和第二个数组的字段相等)

类似这样的: 如果第一个多阵列中的“2146”等于第二个多阵列中的“2146”,则回显 apple.jpg.. 但这是如何工作的?最后几天真的把我吓坏了。提前感谢您的回复。

$multidimensional_array1:

array(4) {
  [0]=>
  string(9) "apple.jpg"
  ["imagepath"]=>
  string(9) "apple.jpg"
  [1]=>
  string(4) "2146"
  ["image_id"]=>
  string(4) "2146"
}

array(4) {
  [0]=>
  string(10) "ananas.jpg"
  ["imagepath"]=>
  string(10) "ananas.jpg"
  [1]=>
  string(4) "2037"
  ["image_id"]=>
  string(4) "2037"
}

array(4) {
  [0]=>
  string(8) "nuts.jpg"
  ["imagepath"]=>
  string(8) "nuts.jpg"
  [1]=>
  string(4) "2024"
  ["image_id"]=>
  string(4) "2024"
}

$multidimensional_array2:

array(2) {
  [0]=>
  string(4) "2146"
  ["ID"]=>
  string(4) "2146"
}

array(2) {
  [0]=>
  string(4) "2037"
  ["ID"]=>
  string(4) "2037"
}

array(2) {
  [0]=>
  string(4) "2024"
  ["ID"]=>
  string(4) "2024"
}

【问题讨论】:

标签: php arrays multidimensional-array compare


【解决方案1】:

只要数组具有相同的键、长度和顺序,您就可以遍历一个和并从两者中选择值。

$len = count($arr1);

for ($i = 0; $i < $len; $i++)
{
    if ($arr1[$i]['image_id'] == $arr2[$i]['ID'])
    {
        // output $arr1[$i]['imagepath']
    }
}

如果信息来自同一个数据库中的两个表,最好将这些表连接在一起。如果数组的排序不同或长度不同(这样 $i 可能会引用两个数组中的不同元素),请使用其中一个作为查找表:

$lookup = array();

foreach ($arr2 as $element)
{
    $lookup[$element['ID']] = $element;
}

foreach ($arr1 as $element)
{
    if (isset($lookup[$element['image_id']]))
    {
        // output $element['imagepath']
    }
}

【讨论】:

  • 非常感谢这个解决方案,第二个应该是完美的.. 不幸的是,我遇到了与我在上面的“Samuels”帖子/解决方案的 cmets-box 中描述的相同的问题 :( 无法弄清楚直到现在..
  • 现在通过上面编辑的解决方案得到它,非常感谢支持!
【解决方案2】:
foreach($multidimensional_array1 as $arr1){
    foreach($multidimensional_array2 as $arr2){
        if($arr2['id']==$arr1['image_id']){
            echo $arr1['imagepath'];
        }
    }
}

注意:数组越大,所需的时间就越长。

【讨论】:

  • 非常感谢塞缪尔,您的快速回复!这应该是一个很好的解决方案.. 但我忘了说,所有图像都应该按第二个数组的结构排序.. $multidimensional_array2 在一个 while 循环中.. 在实际代码中(在我的项目中),第二个数组还将为每个帖子“ID”输出标题和文本。所以现在它应该始终将来自 multi-array1 的正确图片分配给第二个数组的 ID。你知道解决方案吗?非常感谢您的帮助..
  • 您应该能够在 if 语句中回显标题以及来自 $multidimensional_array2 的任何其他信息,就像现在一样
  • 当然,这不是问题,我的问题是另一个 :( 我的输出就像下面来自第二个多数组的 while 循环:$multidimensional_array2['title'], $multidimensional_array2['text '] 最后但并非最不重要的是,我有 $multidimensional_array2['ID'] 的值。因此,来自第一个多数组的所有具有关联 image_id 的图像都应完全分配给来自第二个多数组的 ID ..例如..我得到 2146,所以从第一个多阵列中获取图像 apple.jpg,得到 2037,因此获取 ananas.jpg 等(问题是,整个 2 个多阵列不是像上面那样“很好”地排序)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多