使用in_array获取具有键名的数组中的值

时间:2016-02-11 19:16:58

标签: php arrays cakephp

我不知道为什么但是我有一个代码检查了一个数组,看看它是否已经将值保存在数组中。这只能保存一次数组。这是代码:

$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次。

1 个答案:

答案 0 :(得分:1)

的问题
if (!in_array($value2->id, $categoryatributesarray)) { ...

$value2->id总是包含一个字符串,$categoryatributesarray只包含数组,因此in_array永远不会返回true。 in_array仅将“针”与“草堆”顶层的值进行比较;它不是递归搜索。

有多种方法可以将$value2->idid的{​​{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中的数组键那样高效。使用这些方法之一,每次向元素添加元素时都会搜索整个数组,添加的元素越多,搜索的数组就越多。