我有一个这样的数组:
$r = array();
$r[] = ['name' => 'Test', 'supplierId' => 34];
$r[] = ['name' => 'Test2', 'supplierId' => 31];
$r[] = ['name' => 'Test3', 'supplierId' => 32];
$r[] = ['name' => 'Test4', 'supplierId' => 34];
$r[] = ['name' => 'Test5', 'supplierId' => 30];
$r[] = ['name' => 'Test6', 'supplierId' => 32];
现在我想拿$ r并获得多个数组,由supplierId区别。所以我正在寻找这个结果:
$r30 = ['name' => 'Test5', 'supplierId' => 30];
$r32 = [
['name' => 'Test3', 'supplierId' => 32],
['name' => 'Test6', 'supplierId' => 32]
];
我尝试过,但在这里我无法访问array_filter中的$ sup。
$supplier = array(30, 31, 32, 34);
$finalArray = [];
foreach ($supplier as $sup) {
$finalArray[] = array_filter($r, function($value, $sup) {
echo $sup;
if ($value['supplierId'] == $sup) {
return true;
}
});
}//foreach
知道如何解决它吗?是否没有完成此功能的本机功能 - 类似于create_array_based_on('supplierId');
?
由于
答案 0 :(得分:2)
您可以将$sup
传递给您的匿名函数:
foreach ($supplier as $sup) {
$finalArray[] = array_filter($r, function($value) use ($sup) {
^^^^^^^^^^ you need to pass
it like this
echo $sup;
if ($value['supplierId'] == $sup) {
return true;
}
});
}//foreach
但我个人可能只是遍历原始数组并使用供应商ID作为密钥。
类似的东西:
$results = [];
foreach ($r as $value) {
$results[$value['supplierId']][] = $value;
}
答案 1 :(得分:1)
试试这个
$r = array();
$r[] = ['name' => 'Test', 'supplierId' => 34];
$r[] = ['name' => 'Test2', 'supplierId' => 31];
$r[] = ['name' => 'Test3', 'supplierId' => 32];
$r[] = ['name' => 'Test4', 'supplierId' => 34];
$r[] = ['name' => 'Test5', 'supplierId' => 30];
$r[] = ['name' => 'Test6', 'supplierId' => 32];
$supplier = array(30, 31, 32, 34);
$finalArray = [];
$i=0;
foreach ($supplier as $sup) {
$value =$r[$i]['supplierId'];
if($value==$sup)
{
$finalArray[] = $value;
}
$i++;
}//foreach
$ finalArray是一个包含您需要的所有值的新数组
答案 2 :(得分:0)
您可以合并array_filter和in_array,如下所示:
$finalArray[] = array_filter($r, function($value) use ($supplier) {
return in_array($value['supplierId'], $supplier);
});
没有foreach
循环。
答案 3 :(得分:0)
它会更容易,而不是每个都想要新的变量,比如$ r32,$ r35等......如果你只是使用数组键存储supplierid,例如
$r = array();
$r[] = ['name' => 'Test', 'supplierId' => 34];
$r[] = ['name' => 'Test2', 'supplierId' => 31];
$r[] = ['name' => 'Test3', 'supplierId' => 32];
$r[] = ['name' => 'Test4', 'supplierId' => 34];
$r[] = ['name' => 'Test5', 'supplierId' => 30];
$r[] = ['name' => 'Test6', 'supplierId' => 32];
$newArray = array();
foreach($r as $key => $element)
{
if (!isset($newArray[$element['supplierId']])){
$newArray[$element['supplierId']] = array();
}
$newArray[$element['supplierId']][] = $element;
}
这会给你输出:
<pre>Array
(
[34] => Array
(
[0] => Array
(
[name] => Test
[supplierId] => 34
)
[1] => Array
(
[name] => Test4
[supplierId] => 34
)
)
[31] => Array
(
[0] => Array
(
[name] => Test2
[supplierId] => 31
)
)
[32] => Array
(
[0] => Array
(
[name] => Test3
[supplierId] => 32
)
[1] => Array
(
[name] => Test6
[supplierId] => 32
)
)
[30] => Array
(
[0] => Array
(
[name] => Test5
[supplierId] => 30
)
)
)
</pre>
答案 4 :(得分:0)
关于通过某个键值对嵌套数组进行简单分组:
$finalArr = [];
foreach ($r as $arr) {
$finalArr[$arr['supplierId']][] = $arr;
}
print_r($finalArr);