2017-05-12 74 views
0

我有一个简单的数组$ simpleArray与ids里面。按值匹配数组到新数组

1 
    id="1" 
2 
    id="3" 
3 
    id="7" 

我有另一个数组$ complexArray有几个变量中:

1 
    id="1" 
    color="blue" 
    size="7" 
    height="10" 
2 
    id="2" 
    color="red" 
    size="64" 
    height="52" 
3 
    id="3" 
    color="pink" 
    size="72" 
    height="39" 

我想创建的第三阵列称为$ mixedArray这是一个子集$ complexArray如果id$ simpleArray,那行出现在$ mixedArray。在上面的例子中,新的数组将是:

$mixedArray = 
1 
    id="1" 
    color="blue" 
    size="7" 
    height="10" 
2 
    id="3" 
    color="pink" 
    size="72" 
    height="39" 

我试过如下:

foreach ($simpleArray as $complexArray){ 

    $mixedArray [] = array("id"=>$complexArray['id'], 
          "color"=>$complexArray['color'], 
          "size"=>$complexArray['size'], 
          "height"=>$complexArray['height']); 
} 

print_r($mixedArray); 
+0

你能编辑文章,实际上问一个问题吗? –

+0

更新后的简写标题,代码中的文字以及代码中的换行符 – Parfait

回答

0

你可以这样说:

$mixedArray = array(); 
foreach ($complexArray as $element){ 
    if(in_array($element['id'], $simpleArray)){ 
     array_push($mixedArray, $element); 
    } 
} 

所以,它的作用是它会检查当前complexElement的id是否位于simpleArray的内部,如果是,则将该元素推入mixedArray

0

尝试以下逻辑:

检查复杂数组中的简单数组id,如果存在,则在mixedArray中进行赋值。为此,您可以使用in_array:如果在数组中找到值,则返回TRUE;否则返回FALSE

foreach ($complexArray AS $complexArray1){ 
if (in_array($complexArray1['id'], $simpleArray) { 
$mixedArray [] = $complexArray1; 
} 
} 
print_r($mixedArray); 
0

试试这个,希望这将有助于:

function getMatching($id, $simpleArr){ 
    $found = 0; 
    foreach($simpleArr as $v){ 
     if($v['id'] == $id){ 
      $found = 1; 
      break; 
     } 
    } 
    return $found; 
} 
$mixedArr = array(); 
foreach($complexArr as $ck=>$cv){ 
    $match = getMatching($cv['id'], $simpleArr); 
    if($match){ 
     $mixedArr[] = $cv; 
    } 
} 
echo "<pre>"; print_r($mixedArr); 
0

有几种方法解决这个问题。

您可以使用array_filter

$allowed = array_flip(array_column($simpleArray, 'id')); 

$result = array_filter($complexArray, function ($item) use ($allowed) { 
    return isset($allowed[$item['id']]); 
}); 

或者你可以使用array_intersect_key

$allowed = array_flip(array_column($simpleArray, 'id')); 

$result = array_intersect_key(
    array_combine(array_column($complexArray, 'id'), $complexArray), 
    $allowed 
); 

这里是working demo

0

@ian你也可以做它用foreach()与in_array()条件与array_column()像下面的帮助:

<?php 
    foreach($complexArray as $value){ 
     if(in_array($value["id"], array_column($simpleArray, "id"))){ 
      $mixedArray[] = $value; 
     } 
    } 
    echo "<pre>"; 
    print_r($mixedArray);