【问题标题】:PHP array_push multidimensional associative array to maintain structurePHP array_push 多维关联数组维护结构
【发布时间】:2011-08-13 22:57:37
【问题描述】:

我有一个数组:

 $array= array(
        'Book1' => array('http://www.google.com', '45' ),
        'Book2' => array('http://www.yahoo.com', '46',
        'Book3' => array('http://www.excite.com', '47', )

并且正在尝试编写一个函数,您可以在其中搜索并返回 $keys 和 $values 完整的数组。因此,如果有人在哪里搜索“'Book1','Book2',那么他们会得到一个数组:

$results = array( 'Book1' => array('http://www.google.com', '45' ), 'Book2' => array('http://www.yahoo.com', '46',))

这个:

$bookArray = array()
$bookDetailsarray = array();

$needles  = array('book1' , 'book2' ); 

   foreach ($needles as $needle) {

    foreach ($array as $key => $value) 
        { 

            if ($key == $needle) 
                { 
                array_push($BookArray, $key);
                array_push($bookDetailsarray, $value);
                array_push($bookArray, $bookDetailsarray);                                                          
                }             
        }
     }


  } 

这可行,但在 foreach 的每次迭代中,它都会不断将 $bookDetailsaray 添加到 $value。所以它返回:

Book1 => [0]'Book1details' 
Book2 => [0]'Book1details' [1]'Book2details'
Book3 => [0]'Book1details' [1]'Book2details' [2] 'Book3details'

等等。

我希望能够做到:

array_push($BookArray, $key=>$value);

但显然那是不可能的。 有任何想法吗?即使它只是我需要的数组函数。

【问题讨论】:

    标签: php arrays search


    【解决方案1】:

    使用基本 PHP 函数而不是循环进行搜索的一种更有效的方法:

    $searchArray = array( 'Book1' => array('http://www.google.com', '45' ),
                          'Book2' => array('http://www.yahoo.com', '46'),
                          'Book3' => array('http://www.excite.com', '47' )
                        );
    
    $needles = array('Book1','Book3');
    
    $searchResults = array_intersect_key($searchArray,array_flip($needles));
    
    var_dump($searchResults);
    

    但要注意区分大小写

    编辑

    如果您想要不区分大小写的搜索,您可以改用array_intersect_ukey(),使用自定义比较来忽略键的大小写。

    function key_compare_func($key1, $key2) {
        $key1 = strtoupper($key1);
        $key2 = strtoupper($key2);
    
        if ($key1 == $key2)
            return 0;
        else if ($key1) > $key2)
            return 1;
        else
            return -1;
    }
    
    $searchResults = array_intersect_ukey($searchArray, array_flip($needles), 'key_compare_func');
    

    编辑 2

    使用strcasecmp()也可以让用户自定义的key比较简单很多。

    function key_compare_func($key1, $key2) {
        return strcasecmp($key1,$key2);
    }
    

    【讨论】:

      【解决方案2】:

      改用这个逻辑(虽然,我不是 100% 你想让最后一行做什么?)

      $BookArray[]=$key;
      $bookDetailsarray[]=$value;
      $bookArray[]=$bookDetailsarray;
      

      【讨论】:

        猜你喜欢
        • 2020-06-10
        • 2013-07-10
        • 1970-01-01
        • 1970-01-01
        • 2013-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多