2017-06-02 107 views
0

所以我得到了一个一维数组,如:PHP中使用一个数组作为多维数组的子数组键

Array 
(
[0] => md5 
[1] => name 
[2] => description 
[3] => url 
) 

和一个多维数组:

Array 
(
    [0] => Array 
     (
      [0] => md5#1 
      [1] => name1 
      [2] => desc1 
      [3] => url1 
     ) 
    [1] => Array 
     (
      [0] => md5#2 
      [1] => name2 
      [2] => desc2 
      [3] => url2 
     ) 
) 

,我想先用的值阵列作为多维一个子阵列的密钥,所以输出应为:

Array 
    (
     [0] => Array 
      (
       [md5] => md5#1 
       [name] => name1 
       [desription] => desc1 
       [url] => url1 
      ) 
     [1] => Array 
      (
       [md5] => md5#2 
       [name] => name2 
       [description] => desc2 
       [url] => url2 
      ) 
    ) 

或者(作为一个偏离主题的问题),如果他们的子数组的键不是[md5]而是[0],我怎么能通过md5的值来排列多维数组的元素?

在此先感谢!

+0

如果你确定按照这两个数组中的元素的顺序 - array_combine'。排序是用'usort'完成的。 –

+0

但是,我该如何做到这一点?如果我尝试'array_combine($ keysarray,$ multiDarray)'我得到'array_combine():这两个参数应该有相同数量的元素,因为我认为它试图为[0] =>数组设置键,并且不是为了它的元素。 – sh00t

+0

这就是为什么有foreach循环看到他的答案。它通过第一级的每个项目并将其应用于其值。 –

回答

0

两个数组,其中一个的值是键,其他都值值值相结合,使用array_combine功能:

$keysArray = []; 
$multiArray = []; 
$result_array = []; 
foreach ($multiArray as $value) { 
    $result_array[] = array_combine($keysArray, $value); 
} 

对于排序 - 使用usort和定义自定义功能:

usort($result_array, function($a, $b) { return strcmp($a['md5'], $b['md5']); }); 
+0

该死的,我有第一阵列中有1个额外的元素,我不知道,并且这个错误来自^^ 非常感谢! – sh00t

+0

btw我如何将'$ result_array'的值保存在foreach之外?可能应该放'&'但是在哪里?否则'$ result_array'只有一个元素,如果在foreach外面打印 – sh00t

+0

再次检查您的代码。你不忘记'[]'? –