【问题标题】:php array_intersect is showing no intersectionphp array_intersect 显示没有交集
【发布时间】:2012-08-27 21:53:11
【问题描述】:

我有两个数组 $t1 和 $t2。当我打印出来时,我得到以下信息:

t1:

Array ( [0] => Christina Aguilera [1] => Iron Maiden [2] => Bob Marley ) 

t2:

Array ( [0] => Bob Marley )

我正在尝试通过 array_intersect 函数获取数组的公共元素,并且我正在使用以下行:

$intersection = array_intersect($t1,$t2);

但是,由于某种原因,当我打印结果 $intersection 时,我得到了:

Array ( )

谁能看到它出了什么问题?我的函数的代码在下面,但我认为上面应该足以解决它。

// For extra information
function findMutualInterests($_uProArray, $_tProArray)
{
    $_commonDetails = null;

    $_fieldNames = array_keys($_uProArray[0]);
    $_uProValues = array_values($_uProArray[0]);
    $_tProValues = array_values($_tProArray[0]);
    //print_r($_uProValues);

    // Iterate over the arrays and find ones in common
    for ($i = 0; $i < count($_uProValues); $i++) {
        $t1 = explode(',',$_uProValues[$i]);
        print_r($t1);
        $t2 = explode(',',$_tProValues[$i]);
        print_r($t2);
        $intersection = array_intersect($t1,$t2);
        print_r($intersection);
        $_commonDetails[$_fieldNames[$i]] = implode($intersection);
    }
    return $_commonDetails;
}

编辑:只是想我会指出上面显示的 $t1 和 $t2 的输出是以下函数的单次迭代的输出。我只是选择了那个作为例子。

【问题讨论】:

  • 你确定你最后没有多余的空格吗?在向数组中插入值之前,您是否尝试过使用 trim()
  • 嗨 netcoder - 我不会在任何时候手动将值插入到数组中。这些数组是 FQL 查询(Facebook 查询)的结果,所以我假设它们具有良好的形式。
  • var_dump($intersection) 的输出是什么? var_dump 显示所有变量的类型和长度。
  • 嗨 Jocelyn - 该行的结果是:array(0) { } array(0) { } array(0) { } array(0) { } array(0) { } array( 0) { } 数组(0) { }
  • 对不起,实际需要的是检查var_dump($t1);var_dump($t2);的输出

标签: php arrays array-intersect


【解决方案1】:

Your code works fine,尝试修剪输入字符串。

【讨论】:

    【解决方案2】:

    您的代码有一个很大的错误。 如果$_tProValues 中的元素比$_uProValues 中的元素多,您将不会测试$_tProValues 数组中的所有可能性。那么你将无法测试所有的可能性。这里发生的事情就是这样,你没有测试所有的可能性。

    【讨论】:

      【解决方案3】:

      检查上面的 cmets,因为它工作得很好:

      <?php
      
      $a = array (
              0 => 'Christina Aguilera',
              1 => 'Iron Maiden',
              2 => 'Bob Marley'
          );
      
      $b = array (
              0 => 'Bob Marley'
          );
      
      $intersect = array_intersect( $a, $b );
      
      print_r( $intersect );
      
      ?>
      

      输出:

      Array
      (
          [2] => Bob Marley
      )
      

      【讨论】:

        【解决方案4】:
        **Check the code it is very useful for you ,because this works fine:**
        
        $final_arr = [];
        foreach ($a as $a_val) {
              foreach ($b as $b_val) {
                if(in_array(strtolower($a), array_map('strtolower', $b_val))){
                    $final_arr[] = $b_val; 
                    }
               }
            }
        

        【讨论】:

          猜你喜欢
          • 2019-07-29
          • 2017-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多