我不知道为什么但是我有一个代码检查了一个数组,看看它是否已经将值保存在数组中。这只能保存一次数组。这是代码:
$categoryatributesarray = [];
$categoryarray['type_name'] = 'NA';
$categoryarray['type_id'] = 'NA';
$categoryarray['value_name'] = 'NA';
$categoryarray['value_id'] = 'NA';
$categoryarray['shopify_type'] = 'NA';
array_push($categoryatributesarray, $categoryarray);
foreach ($CategoriesMerging as $key => $value) {
if (empty($value['CategoriesMerging']['category_id'])) {
$this->redirect('/product_mercado_libres/categoryMerging');
return false;
}
$categoryatributes = $meli->get('/categories/' . $value['CategoriesMerging']['category_id'] . '/attributes');
if (!empty($categoryatributes['body'])) {
foreach ($categoryatributes['body'] as $key1 => $value1) {
foreach ($value1->values as $key2 => $value2) {
if (!in_array($value2->id, $categoryatributesarray)) {
$categoryarray['type_name'] = $value1->name;
$categoryarray['type_id'] = $value1->id;
$categoryarray['value_name'] = $value2->name;
$categoryarray['value_id'] = $value2->id;
$categoryarray['shopify_type'] = $value['CategoriesMerging']['type'];
array_push($categoryatributesarray, $categoryarray);
}
}
}
}
}
echo '<pre>';
echo print_r($categoryatributesarray);
echo '</pre>';
它给我的数组以及正在研究的是下一个:
Array
(
[0] => Array
(
[type_name] => NA
[type_id] => NA
[value_name] => NA
[value_id] => NA
[shopify_type] => NA
)
[1] => Array
(
[type_name] => Talle
[type_id] => 30000
[value_name] => 0-3 M
[value_id] => 5f95725
[shopify_type] => Conjuntos
)
[2] => Array
(
[type_name] => Talle
[type_id] => 30000
[value_name] => 3-6 M
[value_id] => ccbd9f4
[shopify_type] => Conjuntos
)
.....
)
我正在寻找的是在同一阵列Im打印中,value_id不会出现2次。
答案 0 :(得分:1)
的问题
if (!in_array($value2->id, $categoryatributesarray)) { ...
$value2->id
总是包含一个字符串,$categoryatributesarray
只包含数组,因此in_array
永远不会返回true。 in_array
仅将“针”与“草堆”顶层的值进行比较;它不是递归搜索。
有多种方法可以将$value2->id
与id
的{{1}}列进行比较。如果你有PHP 5.5+,你可以使用
$categoryatributesarray
if (!in_array($value2->id, array_column($categoryatributesarray, 'id'))) { ...
的结果将是array_column
中数组的所有id
属性的列表。
如果你的PHP版本是&lt; 5.5,你可以改用array_filter
$categoryatributesarray
我不知道这些是“最好的方法”来做到这一点。它们只是我想到的第一个。
正如我在评论中提到的,我真的认为这些方法中的任何一种都不如在构建它时使用$id = $value2->id;
$match = array_filter($categoryatributesarray,
function($x) use ($id) { return $x->id == $id; });
if (!$match) {
作为id
中的数组键那样高效。使用这些方法之一,每次向元素添加元素时都会搜索整个数组,添加的元素越多,搜索的数组就越多。