2013-07-02 6 views
0

Я пытаюсь проверить, указан ли массив в массиве. Я пытаюсь добавить имя продукта и URL-адрес сессии, сессия будет содержать все продукты, посетившие посетителя, но я не хочу, чтобы он дважды добавлял один и тот же продукт, следовательно, валидацию. Поэтому, если продукт уже находится в массиве, я хочу, чтобы он ничего не делал, но если он еще не принадлежит массиву, его нужно добавить. Это до сих пор. Единственной проблемой является проверка.проверка наличия массива в массиве

$viewed_product_url = $viewed_base.$_SERVER['REQUEST_URI']; 
if(!isset($_SESSION['products'])) { 
$_SESSION['products'] = array('product'=>$products_name,'url'=>$viewed_product_url); 
} else { 
$found = false; 
foreach($_SESSION['products'] as $each_item) { 
    while(list($key,$value)=each($each_item)) { 
     if($key == 'product' && $value == $products_name) { 
      $found = true; 
     } 
    } 
} 
if($found==false){ 
echo 'found'; 
    $_SESSION['products'][] = array('product'=>$products_name,'url'=>$viewed_product_url); 
} 
} 

эти ошибки я получаю

Предупреждение: Переменные, передаваемые в каждой() не является массивом или объектом в C: \ XAMPP \ HTDOCS \ клиентов \ MSL \ product.php на линии 10

Предупреждение: переменная передается каждому() не является массивом или объектом в C: \ XAMPP \ HTDOCS \ клиенты \ MSL \ product.php на линии 10 найдено

Так что я просто хочу знать, как вы может проверить, находится ли массив уже в многомерном массиве. Или, если есть другие альтернативы для достижения того, что я хочу здесь.

+1

Вы лечение '$ _SESSION [ 'продуктов'] 'как 2-мерный массив. Но когда вы его инициализируете, это всего лишь 1-мерный ассоциативный массив. – Barmar

ответ

0

проверка с is_array как

if(is_array($_SESSION['products'])) 

, а затем вы можете пойти с foreach

+0

'Traversable' объекты дают false в' is_array' –

1

Изменение:

$_SESSION['products'] = array('product'=>$products_name,'url'=>$viewed_product_url); 

чтобы:

$_SESSION['products'] = array(array('product'=>$products_name,'url'=>$viewed_product_url)); 

, так что вы получите двумерный массив.

Однако, я думаю, что это плохая структура данных. Вы должны сделать $_SESSION['products'] ассоциативным массивом, ключ которого является именем продукта. Таким образом, вы добавляете элементы к нему с:

$_SESSION['products'][$products_name] = $viewed_product_url; 

и вы найдете продукты с:

$found = isset($_SESSION['products'][$products_name]); 
0

$each_item не является массивом. Это и есть причина ошибки.

Попробуйте

$viewed_product_url = $viewed_base.$_SERVER['REQUEST_URI']; 
if(!isset($_SESSION['products'])) { 
$_SESSION['products'] = array('product'=>$products_name,'url'=>$viewed_product_url); 
} else { 
$found = false; 
if (in_array($viewed_product_url, $_SESSION['products'])) { { 
     $found = true; 
    } 
} 
} 
if($found==false){ 
echo 'found'; 
$_SESSION['products'][] = array('product'=>$products_name,'url'=>$viewed_product_url); 

}}

+0

, которые, похоже, не работают – Source

+0

Какая ошибка? – Wishnu

Смежные вопросы